[geoclue] Improve algorithm for selecting best provider.

The previous implementation had two problems. First it would not always
start and subscribe to all applicable providers. This was caused
because the loop restarts when a provider is started (because the loop
could get reordered). If a previously started provider enters the
available state then the loop could be terminated early, leaving some
providers unsubscribed and not started.

Second the provider prioritisation sorting placed providers which
require more resources lower than those that don't if both providers
are above the minimum accuracy. This results in a GPS provider always
having a lower priority than providers which don't have resources.
Instead only order by resource requirements if the accuracy of the
providers are the same and above the minimum accuracy requirements.