SSH API Implementation

This isn't yet rebased, nor is it mergeable, it's just up for review and comments.
The operation isn't quite as neat as that, but you can think of it that way. Figuring out what to return is no different from any other cred request the library makes, which is to return one of the cred types it gives in the flags.

After the library has the username, it will ask the server and then come back to ask for creds again, like any other time the creds are wrong (which is what we're actually doing underneath), and give you a list of creds it can handle, at which point you would return a user/pass combination and/on a keypair depending on what the server supports and the user chooses.