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.
Recursion not tested since the file format is not ready yet, sorry.
Lots of junk code removed, the architecture is now much simpler. AsciiMapSource works as before.