[B+C] Add MetadataProvider for on-demand metadata [BUKKIT-3625]

At the very core of the metadata system is the idea of asking a question. A plugin asks a question, like “What is this player’s chat prefix?” and some other plugin is able to provide an answer. 

The way it’s currently designed, for some plugin (say a chat plugin) to ask what a prefix is, some other plugin (say a permissions plugin or user manager) would have to set the "chatPrefix" key on every user before it's asked. (say when they log in.) This isn’t very effective, and it isn’t quite as “lazy” as one would hope, what if the value is never asked for? Then we've done all that work for nothing.

What would be useful, instead, if the metadata system provided a way for a plugin to register a metadata ‘provider’ for a key. Calling <object>.getMetadata(key) would query the provider if no value is set, passing it the object, for an appropriate metadata value.

To use the chatPrefix example from before, MyAwesomePermissions would register a provider for chatPrefix. Then at some point, BobsChatPlugin calls player.getMetadata("chatPrefix") which asks the provider for the chatPrefix. This also means if the chatPrefix is never requested (say you don't have a chat plugin to use it), there's no work done or memory used in creating the values.

**More Info**
full description at https://bukkit.atlassian.net/browse/BUKKIT-3625
Also see companion pull request https://github.com/Bukkit/CraftBukkit/pull/1032

**Full list of changes**
    * Created provider interface
    * Added provider registration to MetadataStore
    * Added unit tests for provider usage
    * Updated bukkit.Server interface with methods for registering
    Player/Entity/World providers
    * Updated bukkit.Bukkit with static implementations
    * Updated World with way to register Block providers