Ensure peer.eventListeners is always accessed under the peer lock, and switch to EventListenerInvoker in most places so listeners can remove themselves.

Resolves issue 210.
Add some more logging to the Peer class.
Make the added logging more compact.
Don't increment maxConnections when using connectTo from the PeerGroup thread. Resolves issue 234.
Bring back PeerGroupThreadFactory
Mark as spent the outputs used by pending transactions. Resolves issue 243.
Rewrite wallet auto-saving to not require polling. Resolves bug 242.
Introduce a concept of "minimum peers for broadcast" to PeerGroup.broadcastTransaction. This can be used to make sending faster when you are bringing up the network in parallel. It defaults to half the max connections. The idea is to insulate you from slow remote peers somewhat.
Add a toString overload on Wallet. Print private keys in WalletTool when available.
Close ByteArrayOutputStreams. Resolves issue 244.
Fix typo in comment in TransactionConfidence.java
Fix serialization of GetBlocksMessage
Make Script throw ScriptException instead of ArrayIndexOutOfBounds

...when an invalid PUSHDATA constant is used.
Use signed 64-bit values for TransactionOutput.value.

The reference client (stupidly) does this, and we were incorrectly
de-serializing values from the reference client.
Make isCoinBase() equivalent to the reference one.
Use a ScriptChunk class in place of byte[] arrays.
Use minimum values for SpendableCoinbaseDepth.

Use 100 for SpendableCoinbaseDepth instead of 120 on mainnet, and
use 100 on testnet, as the reference client does.
Use pong(+nonce) messages.

* Adds a Pong class
* Uses nonces in pings (when applicable)
* Responds to pings with pongs (when applicable)
* Changes protocol version to 60001
Remove unused multi-byte script support.
Remove redundant programCopy from Script.