Implement ItemMeta.hasData/getData. Fixes BUKKIT-3221

This is also a fix for BUKKIT-4864, and perhaps other issues that
revolve around losing custom item data

Only data that is not already well-known ("auto-registered" by an
existing ItemMetaKey definition) will be stored.

If no such data is present, as will be the normal case, each
CraftMetaItem will have one extra empty reference, so there is very
little memory overhead.

Any unknown (extra or custom) metadata is serialized in a
backwards-compatible way, properly copied to other items, and applied
to and from the underlying NBT data.

The primary purpose of this change is to avoid losing data that Bukkit
does not know about. This could be due to Mojang adding new item types
or fields that Bukkit has not yet created a mirror class definition
for, or from plugins that add their own custom data. This change is
also the basis of an API to allow such custom data.

This could be a valuable change moving forward as Mojang adds more item
classes with custom data (perhaps), or starts generalizing the
structure in the move towards custom item and block types. Making sure
data is properly stored and transferred could prevent a lot of
potential migration issues while dev builds are updating.

And for plugins, this change clears up a number of issues with custom
data use (which currently most be done outside of the Bukkti API),
including interoperability with other plugins, creative mode and
various inventory events.

Conflicts:
	src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java