Fix CREATE_ARRAY to allocate a contiguous block of memory

The prior implementation was returning the wrong memory address on Windows.
According to the C++ standard, that CAN happen across platforms. Basically, placement new[]
is just broken and unreliable.
Added an explicit constructor/destructor