Bukkit/CraftBukkit — pull request #1124 by crast (2013-04-05 01:24:01+00:00)
Title: [B+C] Support registering Metadata Providers. Fixes BUKKIT-3625

**Note** This pull request supercedes #1032. I did this to rebase this onto master and squash the commits down removing all the old implementation details prior to a complete overhaul at the suggestion of Wolvereness.

* implement generic metadata provider registration/unregistration
Implementation details are handled cleanly by a support class and the
world-scoped metadata is handled as well by implementing the registry
per-class instead of per-object
* 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.