bitcoin/bitcoin — pull request #3072 by laanwj (2013-10-09 11:06:11+00:00)
Title: Add separate bitcoin-rpc client

This adds an executable `bitcoin-rpc` that only serves as a Bitcoin RPC client.
The commit does not remove RPC functionality from the `bitcoind` yet, this functionality should be deprecated but is left for a later version to give users some time to switch.

To try to remove RPC clent dependency on BDB and leveldb I
- Moved HelpMessage from init.cpp to util.cpp
- Split bitcoinrpc.cpp into rpcprotocol.cpp, rpcclient.cpp and rpcserver.cpp

Still this was not successful. It turns out that util.cpp, through Params().DataDir() in GetDataDir(fNetSpecific=true) depends on the block chain parameters, and that way pulls in all the core files (core.o, blockchain.o) including the ones that need leveldb and BDB.
Splitting `util.cpp` would be possible although somewhat more thinking is required. This would result in many more changes so let's leave it for later.

**Note:** This leaves the only usage of `fHaveGUI` left in wallet.cpp: https://github.com/bitcoin/bitcoin/blob/master/src/wallet.cpp#L486 which deals with the default key which we want to remove. After this, the variable can be removed from the core. This is outside the scope of this pull though.