Retry SSH on network exceptions, fail on auth fail

The current behavior of the SshConnection currently swallows all
exceptions when trying to connect and will retry on any failure.  This
means that errors like SSH failures will be masked as network failures.

This commit adds a list of retryable exceptions for timeouts, network
connectivity and so forth, and explicitly rescues these for retry. It
also reraises the Net::SSH::AuthenticationFailed to clearly indicate
auth failures.