[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
Maybe you could compare the C code generated with `cython -a` for both solution. Clearly the performance difference does not come from multiprocessing vs threading as it is already visible with `n_jobs=1` in which case both version run sequentially (in the main thread of the main process skipping the job dispatching overhead).