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

**The Issue/Justification**
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 on a class target (say, Player or OfflinePlayer). 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.

For a full dissertation on issues with Metadata as a whole see: http://goo.gl/jRsX9

**PR Breakdown:**
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.

Using the interface would require the user to do something like 
```java
server.getMetadataManager().registerProvider(Sheep.class, plugin, new MetadataProvider<Sheep> { 
    public MetadataValue getValue(Sheep subject, String key) {
        if (key.equals("name")) {
             // using isSheared mostly to demonstrate that we don't need to cast types here
            String name = createRandomName(subject.isSheared())
            return new FixedMetadataValue(plugin, name)
        }
        return null; // We're not interested in this request
    }
});
```

**Testing Results and Materials:**
Wrote extensive new unit tests that provides full coverage on the Metadata Provider interface/implementation, including writing some sample implementations and testing how providers receive data. This is in addition to some new full-stack unit tests in the craftbukkit companion to this ticket: https://github.com/Bukkit/CraftBukkit/pull/1124

**Relevant PR(s):**
CB-1124 https://github.com/Bukkit/CraftBukkit/pull/1124 - Implement MetadataProvider backend inside craftbukkit

**JIRA Ticket:**
BUKKIT-3625 - https://bukkit.atlassian.net/browse/BUKKIT-3625
Extra whitespace above this line