rewrite FindProvidersAsync

This PR implements a better `FindProvidersAsync` call that uses the query framework and actually takes advantage of closer peers.
Thats exactly what it is, since the call asks for a certain number of providers, we dont ever want to send more than they expect.