ENH: Use tp_basicsize, not NPY_SIZEOF_PYARRAYOBJECT, for memory allocation.

This change allows C-API level subtypes of PyArray_Type without forcing the
developer to rewrite the tp_alloc function and only change the amount of
memory allocated.
BUG: PyArray_LexSort allocates too much temporary memory.

PyArray_LexSort was allocating memory to hold actual PyArrayObject's
and PyArrayIterObject's, but only storing pointers to such objects
in the array.
Merge pull request #2976 from bfroehle/memory_waste

BUG: PyArray_LexSort allocates too much temporary memory.
Merge pull request #2975 from bfroehle/tp_alloc

ENH: Use tp_basicsize, not NPY_SIZEOF_PYARRAYOBJECT, for allocation