Multi-threaded consumer

Move multi-threaded consuming into the consumer object.

Queue unbinds are not idempotent as such multiple consumer objects
on the same queue will error when bindings are removed.