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.
In other docstring you use the notation HOST:PORT. I'd prefer is the notation is the same everywhere. I don't like much `Try to establish a connection`, something like `Connect to an nREPL server ...` seems more clear to me. After all pretty many commands try to do something without a guarantee of success...