Client Reorganization

This PR is overall just a code cleanup. I moved a bunch of functions, merged a few functions, and changed the way that generic wallets are used and represented in the client.

Overall, I think the codebase is much better as a result of this PR, though I did break Josh's unmerged build (I almost guarantee it).
There's already a Client method named `genericWallet()`. Unless I'm missing something, the only difference is that the other one returns a pointer.

I'm not sure this function needs to return an error, either. It's really just a getter for a map field, so I'd expect it to return the same types. The caller can handle the false case.