QueueManager object contains the consumer and producer connections

To make sure we're not doing anything silly with our TCP connections
we should create separate connections for our consumer and producer.

Sadly, doing so means we'd have to manage all of the workflow for both
of these connections when all we want to do is wrap our consumption
and production of work in go routines.

To make our lives easier, this 'manager' object will look after
setting up the consumer/producer connections and creating/binding any
exchanges and queues.