Add new enum & MaterialData for fish. Fixes BUKKIT-5097

Many thanks to @TfT_02 for the idea to use a single enum to handle both
types rather than two seperate enums.
Add new enum & MaterialData for Dirt variants
Add new enum & MaterialData for flowers
Made new stairs use Stairs.class for MaterialData
Use Wool.class as MaterialData for colored blocks. Fixes BUKKIT-4710

This includes the new Stained Glass and Stained Glass Panes, as well as
Carpet and Stained Clay.
Add support for new saplings to flower pots

The new flowers do not function as of yet, because they all have the
same data value.
Add new enum & MaterialData for tall plants

The tops of each plant will not currently return a species, as their
type is determined solely from the block below them & not any data of
their own.
Use Crops.class as Material data for all crops. Fixes BUKKIT-4781

This includes Crops, Potato, Carrot, Pumpkin Stem, and Melon Stem. Thanks
to @Deathfish3 for pointing out the stems to me.

These extend crops too.
Use PressurePlate.class for MaterialData
Diode should implement Redstone
All PressureSensors should extend Redstone
Add Dye constructor that takes DyeColor

This is in line with the other MaterialData classes, such as Wool.
Add new enum & MaterialData for QuartzBlock
Add new enum & MaterialData for cobble walls
Add MaterialData for redstone lamps
Add new Rotateable class to handle Trees
Use Rotateable to handle MaterialData for hay
Validate slices eaten/remaining for cake. Fixes BUKKIT-4896
Use Dispenser.class as MaterialData for hoppers. Fixes BUKKIT-4764
Add new enum & MaterialData for anvils