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.
- "guaranteed not to block" not true if `len(tablepeers) > count`
- it doesn't respect context, failing to guarantee what is expected in https://github.com/jbenet/go-ipfs/pull/456/files#r22301346