Bukkit/Bukkit — pull request #845 by crast (2013-04-05 01:17:50+00:00)
Title: [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.