[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
Also if the `precompute` array is F-ordered, it should be symmetric so the code should still work, right? Hence all is needed is contiguity (e.g. C or F ordered). Therefore I think we could have:

```python
if not precompute.flags.contiguous:
    precompute = np.ascontiguous(precompute)
```