Rewrite allocator as an abstract base.

Also, add a new_allocator, which performs allocation
using new, delete.
Implement generic construct and destroy.
Fold new_allocator into allocator.

There's no reason to have 2 classes.