More types are derived from allocator_traits.

objects are now constructed using the correct functions.

It now passes 16/17s of libc++'s test for vectors. With the last remaining test being allocator related and all weird.

I should also honor the following hints:

allocator_traits<allocator_type>::propagate_on_container_copy_assignment::value,
allocator_traits<allocator_type>::propagate_on_container_move_assignment::value
allocator_traits<allocator_type>::propagate_on_container_swap::value