[MRG] Sparse input support for Gradient Boosting

adds sparse input support:

  * Falls back to ``BestSparseSplitter``
  * Holds data in both ``csc`` and ``csr`` format during fit (needs the latter just to call ``tree.apply`` to get the terminal leaf assignment).

Todo:

  - [x] more & better tests
  - [x] benchmarks
  - [x] partial dependence

cc @arjoly @jnothman @glouppe 
Still I find `n_classes` a better name. It's often the case that binary classification is special cased (when the models do OvR). You can put an inline comment to make that explicit:

```python
# Note that `n_classes == 1` for binary classification.
cdef Py_ssize_t n_classes = estimators.shape[1]
```