SSH API Implementation

This isn't yet rebased, nor is it mergeable, it's just up for review and comments.
It shouldn't have the SSH prefix; even though the SSH transport is the only one using it, it doesn't talk about ssh keys.

You would use this because the transport is asking for it. In order to figure out what authentication methods a server supports, you first need to ask for authentication. So what you usually do is ask for a NOOP auth and then report the response. Most servers won't let you switch usernames between auth requests (though the RFC leaves it up to the implementation) so we ask for what the user is claiming their username is on the particular system by asking for a username cred type.