align: Add align.hh

Has one function with two ways of calling it:

- align(size_t num, size_t alignment) -> size_t
- align<size_t alignment>(size_t num) -> size_t

Both are constexpr. The latter is specialized for alignment 1 to simply
return num. Returns num aligned to the given alignment. Doesn't check
that alignment is a power of two, though will probably produce very
bad results if it isn't. Use your brain.
allocator: Add allocator.hh

Covers basic allocators right now:

- mallocator and aligned_mallocator both return memory allocated by
  malloc. It's safe to release memory allocated by one mallocator using
  another mallocator of the same type (meaning an
  aligned_mallocator<256> can release any memory allocated by other
  aligned_mallocator<256> instances, but not <16> instances).

- deallocators are just ways of passing a deallocator to an
  std::unique_ptr and such for trivially destructible types.
  simple_deallocator just creates an instance of the allocator type
  and deallocates the block while bound_deallocator requires a
  reference to an allocator to use for deallocation.

- aligned_mallocator, for alignments 1, 2, 4, 8, and 16 do nothing
  special and act as a wrapper around mallocator.