[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.
The reasoning behind me suggesting to set it to an empty list initially, is that when I test it on the given code sample

    X, y = make_regression(n_samples=100, n_features=10000, random_state=0)
    X[X < 3.0] = 0.0
    csr = sparse.csr_matrix(X)
    clf = ElasticNetCV(n_jobs=-1)
    clf.fit(X, y)

1. On setting to `arange(n_features)` and printing `np.asarray(active_set).size` internally I get the whole range of `n_features`.
2. On setting to an empty list, and printing the size, it limits to a set of 2000 features.