[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.
@jnothman On second thoughts, do you think calculating the `loss_derivative` in one matrix product would increase the efficiency. I doubt it, since the active_features are not contiguous in memory. Looping might be much better. Also given the fact that I'm breaking the loop if the kkt conditions are violated.

For instance,

    X = np.random.rand(10000, 1000)
    x = np.random.randint(0, 1000, 100)
    y = np.random,rand(10000)
    %timeit np.dot(X[:, x].T, y)
    10 loops, best of 3: 38.2 ms per loop
    %timeit  np.array([np.dot(X[:, i], y) for i in x])
    100 loops, best of 3: 7.96 ms per loop