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.
Fair point. Looking over it again looks like we dont generate keys many places -- that is, after the changes in #466 ... -- so not a big deal to introduce this Reader. might want to rebase on that sooner