refactored to separate Bson from protocol which allows for easier testing.
Doing this allowed a separation from a connection and a channel to support
future alternatives to a connection pool.