Adds and modifies some code comments in hash.go.
Provide a little more reasoning behind the way the hash code
for an image is generated.
Complete rewrite of NBT package (again). The previous version
has some issues. It kept encountering errors in Anvil maps.
This happaned on maps, freshly created with vanilla MC 1.7.5.

This new version essentially reverts back to the initial
implementation, which decodes NBT data into a nested tree
of Tag structures. Reason being that this greatly simplifies
the NBT decoder.

The Unmarshal functionality is now built ontop of this.
Fixes long standing bug, where certain maps appear to be corrupted.
The issue is that several parts of the nbt decoder use
io.reader.Read(p), to read a slice of N bytes. I keep forgetting
that this call reads data in discrete chunks. And a single call
to it, may well yield underreads. Replacing all these calls with
io.ReadFull(r, p) solves the problem. All maps are now read
correctly.
Refactors nbt package and re-implements Unmarshal.
The Unmarshal call uses the StructDecoder, which is completely
independant of the Tag types. When unmarshaling into a Go struct,
we have no need for the allocation overhead of the tag tree, hence
why we skip it in this case.

The TagDecoder does parse NBT data into a Tag tree and can be
used to load/examine NBT files, where their structure is unknown.
Alters the way overlay javascript is generated, as well as the
way tiles are stored. We don't use a numeric id anymore, but
a name. E.g.: map, activity, heightmap.

Fixes generated js code for tile->hash mappings. This code
defined an off-by-one size for overlays. Consequently, tiles
were displayed in incorrect locations.