SSH API Implementation

This isn't yet rebased, nor is it mergeable, it's just up for review and comments.
I looked at UsernamePasswordCredentials when I fixed this. I can change that independently, if we want to throw for each value.