Refactor common metadata code into base class. Fixes BUKKIT-3624

Implementing the MetadataValue interface is significant work due to
having to provide a large amount of conversion stub methods. This commit
adds a new optional abstract base class to aid in implementation.