Extract more common bits to the core abstract async provider class to
make other implementations simpler.