add an interface for injection typehints

This allows classes using a _Provider_ to typehint against _ProviderInterface_ instead of _AbstractProvider_. There are no behavioral changes. All tests pass.