Simplify the WalletTool command line and move help to an external file.
WalletTool: bit more cleanup.
Wallet: log exceptions during save.
Quick hack to try and reduce memory consumption for Androids.

Takes a test wallet from around 11.3mb to 9.6mb
Script: intern commonly used chunks.
Threading: experiment with limiting the user/event thread to 100 pending closures.
Memory optimisations to avoid OOM when the user thread falls behind.

- Remove needless recalculations of the Bloom filter on any wallet change, instead of just when keys/scripts are added. This may fix one of the privacy leak issues too.
- Run fast catchup/filter recalculations on the dedicated PeerGroup thread instead of abusing the user thread. Resolves a TODO.
- Replace the user thread SingleThreadedExecutor with a custom class that blocks the submitting thread and logs a warning if the queue is saturated, to avoid building up a backlog of closures.
More memory optimisations.

Run the wallet txConfidenceListener on the calling thread. Move tx broadcast that occurs inside setTransactionBroadcaster outside the wallet lock to avoid inverting on the mempool class (via PeerGroup, but that doesn't lock on the broadcast path).

This makes memory usage smoother by avoiding the creation of tons of closures and spamming the event thread with them.
Fix an edge case bug I just introduced a few minutes ago with the txConfidenceListener changes, and document.
Fix tx fee. Needs a bit more testing on the wallet side, but that will be done soon.
Wallet: Short-circuit runnable creation if executor is SAME_THREAD
Lower the priority of the networking thread to avoid competing with UI threads.
Threading: prefer OOM to deadlock when the user thread is saturated, but keep the warning.
WalletAppKit: Allow subclasses to fiddle with some more stuff.

This isn't really a stable or supportable API, but bitcoinj does not have a stable API, so live and let live.
BlockingClient: some fixes for Orchid
Merge remote-tracking branch 'upstream/master'

Conflicts:
	core/src/main/java/com/google/dogecoin/core/PeerGroup.java
	core/src/main/java/com/google/dogecoin/core/TransactionInput.java
	core/src/main/java/com/google/dogecoin/core/Wallet.java
	core/src/main/java/com/google/dogecoin/script/Script.java
	core/src/test/java/com/google/dogecoin/net/NetworkAbstractionTests.java
	tools/src/main/java/com/google/dogecoin/tools/WalletTool.java
Merge remote-tracking branch 'upstream/master'