ENH: Attempt to rewrite the index parsing.

This is a work in progress. However, I thought I would put it here, so you can bash me about the design choices. So please do!

Changes:
  * MapIter only stays mostly binary compatibile (still needs fixing), but I don't really worry about it since there are only 1 or 2 users anyway.
  * Add full support for 0-d/scalar boolean indices! (well, they only give FutureWarnings at this time.) A 0-d boolean index adds a dimension but works along no axis at all and can be used together with other fancy indices. This includes scalars, so that `0darr[0darr > 1]` can be worked out.
  * Fix boolean array-likes (FutureWarnings for now)!
  * Deprecate non-integer array-likes.
  * Make `array[index]` always identical to `array[index,]` (except for the sequence special cases).
  * General speed-up (though I admit the full-integer index special case is only faster due to micro-optimization)