Organize peers by subnet.

This commit restructures PeerMaps to be a map from Subnet to
PeerID to Peer. This reduces the complexity require to gather peers from
the same subnet.
Reduce contention on the torrent map

We see the torrent map have quite a bit of contention.  Shard the map by
a configurable number of shards to reduce the times we may contend on
the lock.
Merge pull request #30 from psaab/develop

Reduce contention on the torrent map
Only decrement torrent map size if hash exists
Track the total size of the of the torrents map
Use atomics to track peermap size
Merge pull request #31 from psaab/develop

Introduce TorrentSize stat and replace some locks in PeerMap with atomic increments.
Limit number of concurrent connections

Go's net/http library has no limits in place for number of concurrent
requests currently being processed.  This can result in an enormous
number of goroutines being created and the read/write buffer pools
growing unbounded resulting in OOM situations.
Merge pull request #32 from psaab/develop

Limit number of concurrent connections