[refactor] Implement new API, based on jemalloc
This is a redesign of the library, as a hierarchy of core objects implementing its various features. The idea is to create an API that is as flexible and customizable as possible, by exposing as much as possible of its internals, so that users can create customs versions easily. We also move away from memkind as a possible backend, opting instead to vendor the jemalloc interface and implement everything ourselves on top of that. We expect to start building the low-level pieces using hwloc as a backend soon, at least in terms of accessing available devices.