Rewrite nrepl connection logic

- Extract networking functionality (`nrepl-connect`, `nrepl--direct-connect`,
  `nrepl--ssh-tunnel-connect`)

- When `nrepl-force-ssh-on-remotes` is nil try a direct connection with remote
  hosts before attempting a ssh tunnel.

> Seems to me we've forgotten to close the open nREPL client sessions
> with the close op. We're currently leaking nREPL sessions every time
> we disconnect from the server. A small bug, but something to keep in
> mind.

Good point. I think the whole closing/restarting part of CIDER must be
fleshed out some day, but there are bigger things do fix for now.

I think I addressed all of your comments for now. Thanks.