Separated inherited providers into separate typescript file.  Set up providers as interfaces in ProviderStore so that we avoid circular references.