TODO: convert from `ndarray.take` to internal takes, remove platform int <-> int64 conversions?
just throwing this out there, spliting off from discussion at #2892... right now index arrays are constantly being converted back and forth between platform int and int64 on 32-bit platforms, since `ndarray.take` requires the former but the cython routines use the latter

this can probably be removed if all `ndarray.take` usages can be converted to use cython routines, simplifying things considerably and probably improving performance (due to avoiding the conversions, and also since `ndarray.take` is generic and isn't specialized to handle 1-d and 2-d arrays or particular types efficiently)

the only caveats are that `take_nd` doesn't allow normal negative indices and uses promotion/fill behavior by default, the latter can be turned off with `allow_fill=False` but that might get pretty redundant if it's used everywhere; probably best to write a helper which does it. as for the former, there might not be any more cases of places where normal negative indicies are required anymore after #3027...not really sure 
