A hierarchical pool based memory allocator with destructors. It uses reference counting to determine when memory should be freed.