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.
nil channels DO panic if you try to read from them directly, the only time you will encounter a deadlock, is if you have a nil channel as the only case in a select.