Properly log exceptions
Misc improvements in rabbitpy.io

- Don't log an Unmarshaling exception, the whole frame not be in yet
- Use select.select prior to reading with a non-blocking socket
- Don't use Queue.get() with a timeout due to CPU issues
rabbitpy.base improvements and bug fixes

- Rename AMQPChannel._close AMQPChannel.close
- Use the AMQPChannel.rpc method on Close to encapsulate waiting for a CloseOk
- Don't use Queue.get due to CPU issues and refactor around that issue
Removing the Threading.lock() usage, I don't believe it is needed
Remove Channel0.close since it's now in base.AMQPChannel
Consumer related cleanup

- Use a default prefetch count of 100 (decent performance)
- Use the rabbitpy.Channel._consume method instead of invoking Basic.Consume directly
- Other trivial changes
rabbitpy.Connection cleanup

- Cleanup __exit__, close
- Rename _shutdown to _shutdown_connection
- Close channels in _shutdown_connection
- Single point of exit for closing down Channel0 and IO
- Use self._events_wait instead of looping on a while when opening a connection and closing the connection
Channel improvements

- Keep a list of consuming queue objects and on closing of the channel, cancel any consumers, requeueing any unconsumed messages
- Add new _consume method for keeping track of queues that are consuming, issues the Basic.Consume rpc call
- New _multi_nack method