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).
You're right, modifying the value returned by `genericWallet()` does not modify the value inside the map. You'd need to have `c.genericWallets` be a map of pointers in order to do that.

Alternatively, you could add a a `modify` function that takes a `GenericWallet` and reinserts it into the map.

I feel like there's a less ugly way to do this though.