Refactored (Lazy|Fixed)MetadataValue's conversions into a base class (BUKKIT-1460)

The implementation of a MetadataValue is complicated by needing to provide a number of conversion functions, refactored this code out of LazyMetadataValue into new base abstract class.

In addition, changed FixedMetadataValue to not be a callable closure implementation of LazyMetadataValue, see explanation in relevant commit.

Includes unit tests with a test implementation as well.

Also see associated ticket: https://bukkit.atlassian.net/browse/BUKKIT-1460