Major MemoryManager overhaul

MemoryManager is a class that handles creation and deletion of heap
allocated objects
You can now choose (thanks to painful template metaprogramming)
different container types for storage and deletion storage - this allows
you to use sets and prevent accidental double deletions
It is advised (in my opinion) to use MemoryManager whenever possible,
since it shouldn't have any overhead over two containers of <T*>
Currently supported containers are std::vector and
google::dense_hash_set, but it's easy to write your own traits