Use fused types for _take_2d
Misc cleanup

For some of the cython code I get unexplained test failures when using fused types.  Vaguely hoping to narrow down the set of affected functions so as to make a helpful bug report to cython.