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.
From reading this paragraph it's unclear what the intended effect is.

The channel  is buffered for `count` elements, but it iterates over `len(tablepeers chan)`. 

The peerset is limited to `count`, but `len(tablepeers)` elements are added (and the peerset implementation naively adds the values.

This is all quite confusing. If a problem were to arise around here, I wouldn't know how to fix it. It's not clear what the correct behavior is supposed to be.