[WIP] Releasing the GIL in the inner loop of coordinate descent

- [x] release the GIL in the dual gap check (need to replace numpy calls by BLAS equivalents)
- [x] release the GIL in the sparse input variant
- [x] release the GIL for the precomputed Gram matrix variant
- [ ] benchmark the scaling for instance by hacking the cross_val_score function to make it possible to use the threading backend instead of multiprocessing
Please try to add a `print(precompute.flags)` when you run that example to see what kind of memory layout you naturally get in that example as I requested in https://github.com/scikit-learn/scikit-learn/pull/3102/files#r13582177