Make OfflinePlayer metadatable
Complete provider revamp.

This is based on Amaranth/Wolvereness's concepts to make the Provider
system into a dispatch system similar in idea to events, only sans
reflection stuff.
* Provider loses the getOwningPlugin, to make implementation easier.
Instead of getOwningPlugin, registration gets a plugin to the
parameter, similar to registering events, scheduler tasks, etc.
* Provider registration is not done on a contextual key, instead
there's one per scope/plugin.
* Metadata Store base implementation now expects a collection of
providers, not a map of key=>providers and will run multiple providers.