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. I tried around a bit what is fastest, the cases where PyIntAsInt*
     were not used may have been a bit faster. Using index is actually
     much faster for arrays and array scalars.
  6. This fixes some occurances where integer division was not yet used
     and errors were created in Py3k