This is needed to recognize what type of tiles a layer contains. Client code has to fill in a map of hash => add_layer<T>() pointers. As a layer is loaded, the correct add_layer<T>() is called based on the hash saved with the layer itself.
Lots of junk code removed, the architecture is now much simpler. AsciiMapSource works as before.
This fixes the build on 64-bit machines, where size_t and uint32_t from vector.hpp would mismatch.