Uncovered a deadlock scenario

Right now the unit tests do not pass.

It is possible for the listener to fill the dispatch channel. When this
happens the app and the responder can no longer send messages back to
the dispatcher, and they will block trying to do this. This means that
we need a separate channel for each component that wants to talk to the
dispatcher.

The work that lead to this discovery was an attempt to simulate an
unreliable network using the meddleQ. A meddleQ looks like a
ReadWriteCloser and acts like a normal queue for sending []byte.
However, there is a goroutine in the middle who can reorder, drop or
othwerwise mess with the messages as they pass through the queue. The
test exists now uses a non-meddling meddleQ (which passes messages
through unmolested) and floods the listener with a large number of
messages.