A nice invariant for bitswap sessions:
Senders and receivers can trust that messages do not contain
duplicate blocks or duplicate keys. Backing the message with a
map enforces this invariant.
This comes at the cost of O(n) getters.
Move go-ipfs/bitswap package to go-ipfs/exchange/bitswap
* Delineates the difference between the generic exchange interface and
implementations (eg. BitSwap protocol)
Thus, the bitswap protocol can be refined without having to overthink
how future exchanges will work. Aspects common to BitSwap and other
exchanges can be extracted out to the exchange package in piecemeal.
Future exchange implementations can be placed in sibling packages next
to exchange/bitswap. (eg. exchange/multilateral)