Add new enum & MaterialData for fish

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

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

This includes Crops, Potato, and Carrot,
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 #4896
Use Dispenser.class as MaterialData for hoppers. Fixes #4764
Add new enum & MaterialData for anvils