[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.
I think the paper intends a loop, rather than just two calls to `_cd_fast_path`. Roughly I read it as like:
```python
ever_active = set(np.flatnonzero(coef_ > 1e-15)) # using coef from first alpha
for alpha in alphas[1:]:
    kkt_violations = True
    while kkt_violations:
        eligible_features = ever_active.copy()
        strong_features = calculate_strong(...)
        while kkt_violations:
            enet_cd(eligible_features)
            kkt_violations = get_kkt_violations(strong_features)
            strong_features.update(kkt_violations)
        kkt_violations = get_kkt_violations(all_features - strong_features)
        ever_active.update(kkt_violations)
```
(After writing it out I think I agree that you don't need a `eligible_features` separate to `ever_active`.)