refactor(bitswap) leverage third-party pubsub lib

use a third-party pubsub library for internal communications

Insights:
* Within bitswap, the actors don't need anything more than simple pubsub
behavior. Wrapping and unwrapping messages proves unneccessary.

Changes:
* Simplifies the interface for both actors calling GetBlock and actors
receiving blocks on the network
* Leverages a well-tested third-party pubsub library

Design Goals:
* reduce complexity
* extract implementation details (wrapping and unwrapping data, etc)
from bitswap and let bitswap focus on composition of core algorithms
operations
refactor(bitswap) meslistener -> notifications
fix(bitswap:notifications) shutdown on bs.Halt()
style(bitswap:notifications) rm explicit returns
fix(bitswap:notifications) close chan on Publish
docs(bitswap:notifications) Subscribe
refactor(bitswap:notifications) move, rename

add interface
test(bitswap:notifications) check if chan is open