Revive QueuedSocket to queue messages on a per-channel basis so that parallelized threads can share one socket
Created by: agraubert
The .send() method should insert a [channel, message] pair into a queue of outgoing messages. The .recv() method should block until a message is available in the specified channel, then return that message. In the background, a thread should work through the queue of outgoing messages, and enqueue received messages.