This commit adds a block and stack allocators.
These provide an effecient alternative to new/delete,
and can also simplify memory management since they own the memory.
In addition, a hash function for tiles was added and some C-style arrays
were replaced with std::vector