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

** Note ** this pull request supercedes #773 . I did this to rebase the entire thing onto all the other metadata changes which were pulled (and conflicted) as well as squash this 11-commit beast into a single commit on each. I will be doing the same for the CB-side.

Metadata Providers are a new "dispatch" type system for allowing metadata to
be done truly on-demand, via calling into a contextual "provider" when metadata
is requested. Through use of generics providers can be registered for a large
range of bukkit types and they will be dispatched to the providers which respond
for those specific types.

    * Created provider interface
    * Added unit tests for provider usage
    * Updated bukkit.Server interface with methods for registering /unregistering providers
    * Updated bukkit.Bukkit with static implementations
    * Update generic type requirements of MetadataStore
    * Make OfflinePlayer Metadatable for consistency and generic guarantees.