[MRG+1] Sparse output KNN

- [x] ~~Implement Cython CSR rowise mode function in sparsefuncs_fast~~
- [x] ~~Implement Cython CSR rowise weighted_mode function in sparsefuncs_fast~~
- [x] ~~Backport scipy sparse advanced indexing~~


This PR originally started out with Cython based improvements, but a middle ground has been chosen for simplicity of implementation.
You seem to be missing a `classes_.take` step. Please add a test where class numbers are not contiguous (or else explicitly reject such data). I am also not sure that you should be requiring the data to be `intp`s, rather than `classes_[0].dtype` as in the dense case (with the caveat that only a dtype that is supported for the sparse input will be produced as output).