Make find_node and get_peer *a lot* faster.
Make find_node and get_peer *a lot* faster.

Batch all requests using buffered channels, then process each unique infohash request only
once (de-duping). The main benefits are:

- spend a lot less time looking at the routing table. The table will be inspected less
often, and it happens, it will have many new nodes (instead of just one) so the scan will
return many more good nodes.

- findNode and getPeer reply processing were still monopolizing CPU cycles and network
during influx of responses. So during startup the node would most of the time sending,
receiving and processing the response to find_node queries used to build the neighborhood.
Part of the processing included the work of sending further find_node queries to new nodes
(which required routing table searches). At the end, very few time would remain for sending
get_peers.
 ~ Now the the find_node response handler will push find_node queries to the
de-duping/batching queue, yielding an opportunity for other parts of the DHT node to do
useful work, including get_peer searches.

beni55/dht,Alienero/dht