[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 
@arjoly @ogrisel @mblondel I can change ``K`` to ``n_classes`` or ``n_vectors`` .
But if we do that then we should also change ``K`` in the ``gradient_boosting`` module where it is used in the initial estimators and other parts. This will break the serialization format for the next release. I personally care a lot about serialization compatibility between different releases even though sklearn doesnt make any guarantees. 

So if you say that the increase in readability/maintainability is worth breaking the serialization format then I'll do it -- personally, I'm -1 .