refactor(bitswap) internal notifications

@whyrusleeping @jbenet 

Context: In the bitswap subsystem, local actors block in `GetBlock` waiting on a message from the network. When results are received, a different actor receives the value and must dispatch to all waiting subcribers. If within the deadline, the `GetBlock` subscriber receives the retrieved value.

This PR introduces a simplified interface for this internal communication.

Insights:
* Within bitswap, the actors don't need anything more than simple pubsub
behavior. Wrapping and unwrapping messages proves unnecessary.

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 operations