ENH SGD Cython improvements

* nogil declarations where possible (but no with nogil blocks, since the
  performance benefit of those is not clear)
* use BLAS where appropriate
* replaced DOUBLE by double, INTEGER and int32 by int/np.intc, since that's
  the type used by scipy.sparse
* explicit checks that dataset dims don't exceed INT_MAX
* replaced an np.all by an explicit loop (npymath library for C99 isfinite)