Added layer insertion & deletion

Also refactored map.cpp, might do the same for the other map modules.
Made Tileset::DrawVectorTo() more efficient, see notes

Tileset::DrawVectorTo() now skips tiles not on the screen, but its also
much clearer to read. I've created temp variables to hold values that
won't change during the call. I could probably cache these values as well,
but the current method is good enough.

I've refactored more of the other map modules, including MapLayer, and its
possible to change the type of MapTile::value without many problems. I'd
still like to improve this further, but it's at a stage where it would
only be improving modability, rather than functionality.