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)
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
DOC typo in SVM narrative

Fixes #2465.
ENH: added PresortBestSplitter
ENH: remove assert
Merge pull request #2462 from kmike/metrics-unicode

[MRG] Add unicode support to sklearn.metrics.classification_report
COMIST: shorten some long lines
DOC: added entry to What's New
Merge pull request #2469 from glouppe/tree-presort

[MRG] Make GBRT faster by presorting X
FIX #2372: non-shuffling StratifiedKFold implementation and updated tests
One more test for stratified k-fold