MessageQueue encapsulates a message queue built on top of a pipe. The message queue needs a handler for receiving messages and must be added to a worker for pumping messages through the pipe. Each Worker will have an instance of MessageQueue.