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