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)
Issue #2455: Make RBM work with sparse input when verbose=True.
Change RBM sparse format from CSC to CSR.
Cosmetic changes.
Add issparse import.
Cosmetic changes.
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.
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: don't bias random feature selection
FIX: random number generator

FIX: address @larsmans + @ogrisel comments

ENH: add INT32_t type

ENH: rename INT32_t to UINT32_t

FIX: modulo RAND_R_MAX+1

FIX: broken tests
FIX: module RAND_R_MAX