[WIP] Strong rules for coordinate descent

Fixes https://github.com/scikit-learn/scikit-learn/issues/229

This implements strong rules for discarding non active features in coordinate descent. I believe this works. However it is really slow. 

TODO:

- [ ] Decide whether to migrate the strong_active_set and check_kkt_conditions to Cython
- [ ] Fix the lazy centering of sparse matrices that gives slightly different results.
Well. Let's take a step back.

Why do you need to densify this at all? `feature` only appears to be used in the following dot. Just use `np.dot(X.data[X.indptr[i]:X.indptr[i+1]], residual.take(X.indices[X.indptr[i]:X.indptr[i+1]], mode='clip'))` in the sparse case.