Major Changes to Client

Adds a client struct, which has a map of WalletIDs to generic wallets. Generic wallets (currently) are just a siacrypto.Keypair (a new struct in siacrypto) and don't need their own struct [yet].

All functions now act on a client, and I've moved the case statements into their own functions, which cleans up the main function a bit.

While it wasn't done now, I would like to change siacrypto.CreateKeyPair to return a siacrypto.Keypair instead of a public key and a secret key. Since keys correspond to each other, I figured it would be better to have a struct for each. Maybe it's not the best approach, but it seemed like overall it could reduce errors.
good catch