API: Deprecate non-integers for integer function arguments

These changes make numpy generally use the index machinery for converting
of integers (almost) everywhere, and deprecates the use of floating point
numbers.

This has many changes, so here is an overview:
  1. Deprecate use of booleans, floats or high dimensional arrays
     integers, where the high dimensional array part is due to
  2. deprecating array.__index__() if array.ndim != 0
  3. No attempt is made at giving a function specific meaningful
     DeprecationWarning. IE. indexing or np.reshape all give the same
     warnings. For the case of raised DeprecationWarnings, no attempt
     is made to show it. Indexing will raise an Index error instead
     (so you get the error you would get when the deprecation process is
     done in these cases)
  4. Because it is changed so deep down (and hard to pull apart in indexing)
     espeacially there it is possible to get multiple warnings for one
     command. `arr[0.0,:]` (for a 2-d array) will even give two warnings.
  5. The old code was somewhat faster for most cases, but it also seems
     to have lacked a few tests since PyArray_PyIntAsInt* was not used.
  6. This fixes some occurances where integer division was not yet used
     and errors were created in Py3k