Purge references to block ids from most of the code

Block ids are going away in Minecraft. Each block should be referenced
by its name.

Why?
====

Block ids will of course still be used internally in the save files and
network packets, but to the outside world they're gone. In the future,
Minecraft will use dynamic ids everywhere. Grass doens't have to be id
2, it could as well be id 23. At the moment all vanilla blocks still
have a static id.

Mods, on the other hand, already use dynamic ids, Forge takes care of
that. When registering a block in Forge, it is unknown to the modder
which id the block will get.

Up until this commit, Terrain Control still used block ids everywhere in
the code. This maked it a hassle for users of Terrain Control to find
out what the id was of a modded block. From now on, modded blocks can
just be referenced by their name.

Breakdown
=========

Most instances of "int id, int data" have been replaced by
"LocalMaterialData material". LocalMaterialData holds both the block and
its data. LocalMaterialData is immutable, so it can be easily shared to
other classes. LocalMaterialData has two methods to create a new
instance with different block data: withBlockData(data) to change the
block data to something else, and rotate() to automatically rotate the
block data. rotate() uses the BlockHelper class to achieve this. As the
"Local" in the name suggests, LocalMaterialData is implemented by the
Bukkit and Forge versions of Terrain Control. You can use
TerrainControl.readMaterial(String) or
TerrainControl.toLocalMaterialData(DefaultMaterial,int blockData).

A new class called MaterialSet has been added. This class replaces the
various block list implementations we have seen so far in Terrain
Control. All block lists now have consistent behaviour. You can now for
example use "Solid" or "All" in the SourceBlocks in the resources of the
BiomeConfigs and in the BlockChecks in BO3s. Previously this was only
possible in spawnOnBlockType in BO2s. MaterialSet will get a few
improvements soon to let it work better with block data.

Some places in the code still use the byte[] id arrays. I'm not sure at
the moment what should happen with them. However, the ids in those
arrays are dynamic now.

Old configs
===========

Ids in old configs will still be read. DefaultMaterial.getMaterial(int
id) continues to provide a block id lookup for the vanilla blocks. Even
when all ids become dynamic in Minecraft, DefaultMaterial will still use
the old static ids to make sure that old worlds still load properly.

References
==========

* https://twitter.com/Dinnerbone/status/433602565587345408
* http://www.minecraftforge.net/forum/index.php/topic,16195.0.html

Final note
=======
Could anybody help testing this? This commit is huge, and I would be
surprised if it didn't break at least four things.
Fix BiomeConfig writing, fix ReplacedBlocks, remove ancient method