Properly reconnect to nodes after a connection is lost.
Decouple SSHTransport from TCP sockets and rename it to AuthenticatedTransport

This allows base transports to be dumb bit pipes and get proper
authentication over themselves for free. Added tcp transport to
illustrate this.