Creates a new BufferedChannel, which operates like its underlying channel
except that it buffers calls to send until it receives a message from its
peer claiming that the peer is ready to receive. The peer is also expected
to be a BufferedChannel, though this is not enforced.