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).
Yes but that's a very important distinction. I'm thinking about changing this a little further but need to put some more thought into it.

The private function genericWallet() gives you direct access to the wallet, and an ability to manipulate the structure as it's held in the client. (and actually, because we're using a map here, this might be an issue because I remember that maps don't deal with pointers well)

The other one returns a replication of the data held in the quorum, which means you can view everything, but your changes don't change the state of the client.

This way the client can assume that it's the only object making changes to it's own internal state.