Enable retries for SSH

I'd left this alone because I assumed that the transport had been doing it right, but it turns out that we can try to auth multiple times, so let's do that.

- [x] Detect which authentication methods are supported
- [x] Perform authentication in a loop, calling the credentials callback until it gives up
- [ ] Detect when the username changes and reissue the connection (maybe)