Deprecate non 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

--

The biggest discussion maybe should be about point 3. Should we attempt to control the number of warnings and try to raise the original `DeprecationWarning` instead of basically giving the error that would occur after the deprecation is finished? The other thing would be maybe point 2, but honestly this is such an esoteric thing that I cannot believe anyone relies on it in itself, and other then that it leads to deprecating the use `array([4])` for an integer in indexing and with this inside numpy.