Allow user to specify SSH pubkey to save creds with

We cannot currently decrypt using passphrase protected private keys.
We need to fix this ASAP.
Generate the salt randomly each time
Percolate errors back up the stack instead of panicing
Use interface for generating salts so that we can both test and re-use the same salt for key_id and secret
Handle encrypted SSH private keys (Issue #8)
Initial refactor of credential saving and encrypting.