Fixing server initiated connection / channel close handling.

Previous code wouldn't work if the server initiated the close. Test with RabbitMQ management and try to do a force close. This will allow a consumer to recover and reconnect.
They are called in the order they are created. The destructor on the connection gets called first and closes all of the channels. In my tests the connection is always gone and the channel destructor throws an exception that cannot be recovered from.