[WIP] Sparse output KNN

WIP in early stages

- [x] Implement Cython CSR rowise mode function in sparsefuncs_fast
- [ ] Implement Cython CSR rowise weighted_mode function in sparsefuncs_fast
Oh, I didn't see that at the end. I haven't really understood what's going on in the `predict` function altogether, or what sparse support is needed for. But if the sparse representation is efficient, the mode should almost always be 0. In that case, testing for nnz being greater than half the elements should be done before any slower mode calculation.

And as suggested above, if more than half the elements are nonzero, CSR is not really useful