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)
FIX #2372: StratifiedKFold less impact on the original order of samples.
Fix accidental doctest breakage.
Instead of linking to NB, explain the problem inside the test itself.

I'm using a smaller number of examples from the digits dataset because
that cuts down test execution time for me from 17s to 4s, and still
yields the very similar results.
Avoid list, preallocate a numpy array for indices instead.

It appears that the sorted() call is unnecessary here.
Update comment with numbers for when we run with 800 samples.
Add entry for #2372 to whats_new.rst
More detailed entry for StratifiedKFold fix in whats_new.rst
Revert "More detailed entry for StratifiedKFold fix in whats_new.rst"

This reverts commit fee660c62d08962839a7875641e7719b03b26d26.
Revert "Add entry for #2372 to whats_new.rst"

This reverts commit 6c7e7515395290981dfff4c5f003e3ca5d629603.
Revert "Update comment with numbers for when we run with 800 samples."

This reverts commit 17f62e69cd75cad14f2c78f0f88c8b20dc528a58.
Revert "Avoid list, preallocate a numpy array for indices instead."

This reverts commit bbaa9d9634d8c3bfda69269eb959aa00fa22f207.
Revert "Instead of linking to NB, explain the problem inside the test itself."

This reverts commit cf9788cb07abcedee68fff808ef6132ab3b92553.
Revert "Fix accidental doctest breakage."

This reverts commit 4c95f5e00a713a9991064056ac667f01646d9d05.
Revert "FIX #2372: StratifiedKFold less impact on the original order of samples."

This reverts commit 9e857977507238789e730fe91c0b60912cb70781.
TST "confusion_matrix" was a duplicated key in CLASSIFICATION_METRICS and NOT_SYMMETRIC_METRICS dicts
TST style fix: old_error_settings should be outside try-finally block to be safely used in finally statement
FIX classification_report shouldn't fail on unicode labels in Python 2.x

'{0}'.format(arg) doesn't promote the whole string to unicode if arg is unicode - it tries to encode arg to sys.getdefaultencoding() instead.
"%s" doesn't have this gotcha.
FIX: more accurate description of eta0 in SGDClassifier
Merge pull request #2426 from larsmans/sgd-improvements

[MRG] SGD Cython improvements