Channel Message Processing Changes

* Connection holds channel instances. They can be accessed by name.
* Connection holds a map of all channels indexed by name.
* Each channel has a private queue.
* Each channel has its own receive queue. When a connection recevies a message,
  it passes it onto the corresponding channels receive queue.
* Channel 0 is the global channel and is off limits. The connection object holds
  a private instance of a channel for channel 0.

Connections channel methods are as follows

  - createChannel(name)
  - destroyChannel(name)
  - closeAllChannels()
  - reopenAllChannels()

Channel creation automatically implies opening the channel and creating a
private queue. The channel is closed by destroyChannel(). The open()/close() is
not used here because it doesn't work well with the model. There is a shared
custody of Channel instances between the Connection object and external users of
those channel instances. It is possible at any time that a channel exception can
occur, in which case the connection cannot just delete a channel instance create
an invalid pointer for the external users. Therefore, the connection keeps the
channel instance alive but sets its state to a closed. Then external users can
be apprised of the closed state and release custody of the channel and eventuall
call destroyChannel() to formally destroy the channel instance.

Basic plumbing now works but channel queues are not implemented yet. Messages
still routed to amqp::Socket receive queue.