Fix PR22634 - std::allocator doesn't respect over-aligned types.
This patch fixes std::allocator, and more specifically, all users
of libcpp_allocate and libcpp_deallocate, to support over-aligned
__libcpp_allocate/deallocate now take an alignment parameter, and when
the specified alignment is greater than that supported by malloc/new,
the aligned version of operator new is called (assuming it's available).
When aligned new isn't available, the old behavior has been kept, and the
alignment parameter is ignored.
This patch depends on recent changes to builtin_operator_new/delete which
allow them to be used to call any regular new/delete operator. By using
builtin_operator_new/delete when possible, the new/delete erasure optimization