rewrite FindProvidersAsync

This PR implements a better `FindProvidersAsync` call that uses the query framework and actually takes advantage of closer peers.
Hrm... this situation is exactly what my `AddIfSmallerThan` method is for, to prevent this sort of race condition.