Steve Brooks' ORC Allocator
This change improves memory handling by adding a custom allocator to many standard library types (vector and string most notably.) The custom allocators will keep a thread-local pool of memory blocks that have been freed, in the hopes that an allocation of the same size is not far off, and the memory can be recycled. The current implementation limits this recycling behavior to allocations of 1024 bytes or fewer.
The change also includes a handful of metrics that are reported at the end of the ORC run, that show memory cache hits and misses.
Both the allocator and the metrics therein are compile-time enabled via feature flags.
This PR is dedicated to Steve Brooks who recently retired from Adobe. It was Steve's inspiration and hard work that led to the discovery of these allocation patterns. Steve also contributed the bulk of the changes that made this PR possible.
I'll re-test this branch once PR #42 lands to get more recent numbers.
The memory optimization work of this PR was consumed by the fatal attribute hash refactoring. We are moving ORC in the direction of static immutable memory, which is certainly the spirit of this PR.