Initial stab at a tracking allocator.
Handle arrays properly.
Support `std::allocator_traits::max_size`
Use weak pointer properly.
Add `make` function

There’s a lot of weird picayune details about allocating with
`std::allocator_traits` that this handles.
Permit `counted_t`s to take deleters and arbitrary Allocators.
Fix myriad small details.

- _ts on types
- operator ==(
- we use allocator_arg for symmetry in make even though it's not necessary
Move this to toplevel
Make this exception safe.
Fix stupid compilation problem.
Try this instead of the lambda.
Per @mlucy, lose spaces
Clarify situation with data_buffer_t.
Attempt to address space concerns by doing our own type erasure.
Minor style niggles.
Break make out into its own utils file and correct header define
Use make<> rather than dealing with try/catch everywhere.
Add an allocator for weird types like data_buffer_t.
Make data_buffer_t and shared_buf_t use more standard memory alloc
Add single-thread assertions to the allocator factory.

These will trip an error in debug mode if the thread changes, which
would invalidate our assumptions regarding single threadedness.