Use a SocketChannel instead of a Socket, because it's cooler
Do writes through the channel
Expose an explicit reconnection method
Test that we block if necessary when sending
Use non-blocking IO in reconnecting stream so we can quickly detect peer closes (yay!)
Tighten up try count in reconnecting stream
Improve exception handling in reconnecting stream
Use SelectionKey to simplify tests and loops in reconnecting stream