rewrite of provides to better select peers to send RPCs to

The main change in this PR is the implementation of `getClosestPeers` that returns a channel of peers. progressively closer to the target key. This is used to put provider values to the best possible peers.
This method returns a set of peers to be queried. So it follows that it should return `K` peers. So having `count == KValue` will set that limitation. The `getClosestPeers` is not what is being limited by `K`, but whatever other RPC that uses it. The kademlia spec refers to this operation as a 'node lookup', If you have any other questions about its operation, i highly recommend reading the spec, primarily section 2.3 titled 'Kademlia Protocol'