Keep canonical lists of providers

This allows registering providers for any metadatable class, not just
the base classes available in stores, which will reduce confusion and
also make it so provider "events" are only called for more specific
classes if applicable.