[WIP] Ridge path

Adressing https://github.com/scikit-learn/scikit-learn/issues/3373

A first implementation of a ridge path using `'eigen'` solver. This solver is now available in `ridge_regression`, which calls upon a reduced functionality of `ridge_path`.

Next steps:

- The same path approach can be straightforwardly used with SVD as well: Write svd path and replace in ridge_regression
- Attack `RidgeCV`: Replace the `GridSearchCV` by `ridge_path` if `eigen` or `svd` are selected.
- Incorporate `ridge_path_looe` from the gist https://gist.github.com/eickenberg/e9eb106f12e40d017fd0
- Adjust `RidgeCV` to use the looe functionalities


Border case but we should consider the possibility of (v_train[np.newaxis, :, np.newaxis] + alphas[:, np.newaxis]) being zero (this can be reproduced e.g. with a zero design matrix and alpha=0). Similarly as what we do in _solve_svd I think we replace that like with something like this
```
    tmp = (v_train[np.newaxis, :, np.newaxis] + alphas[:, np.newaxis])
    idx = (tmp != 0)
    inv_v_alpha = np.zeros_like(tmp)
    inv_v_alpha[idx] = 1. / tmp[idx]
```
what do you think?