PeerGroup improvements:

1) Don't hold the PeerGroup lock across DNS discovery, otherwise the API is high latency in this period of startup. Fixes issue in Lighthouse where the UI would not appear until DNS resolution had completed.

2) Don't backoff peers that failed due to a first-time connection error.

3) If an IPv6 peer fails to connect due to a NoRouteToHostException, don't try any more IPv6 peers in future.
Add/Remove wallets to the connected peers as they are added/removed
to/from the PeerGroup
Add javadoc comment for `VersionedChecksummedBytes.toString()`.
Overload HD Key deserialization methods with single-argument versions that use a null parent.
Add missing JavaDocs for ExchangeRate.
Fix one unexpected case of fiatToCoin overflow and add tests.
Added check to determine if the DB connection has been closed. If yes, then get a new connection.
Sort keys by age when printing them. Also fix a generics warning.
ExamplePaymentChannelClient should not send PeerGroup to the extension, since it uses WalletAppKit.