Better tcpclient reconnect

Change the way the NettyTcpClient handles reconnection to eliminate backreferences in Consumers that could cause dead connections to still be referenceable and thus preventing their garbage collection.

Also changed some of the event handling around connection opening and closing and streamlined some of the code to handle and respond to those events.