Refactor and clean IsotonicRegression

Refactor and clean IsotonicRegression:

* Rename ``X`` to ``x`` to properly reflect that input is a vector, not matrix
* Refactor the ``y=isotonic_regression(...)`` logic into ``_build_y``
* Refactor the ``interp1d`` logic into ``_build_f``
* Store ``f=interp1d(...)`` so that it is not re-calculated on each call to ``transform``

Sorry about the last one, @agramfort.  Reset and sync'd.
This would be simpler to write it as:

```python
if self.out_of_bounds not in ["raise", "nan", "clip"]:
    raise ValueError("The argument ``out_of_bounds`` must be in "
                     "'nan', 'clip', 'raise'; got {0}"
                     .format(self.out_of_bounds)) 
bounds_error = self.out_of_bounds == "raise"
self.f_ = interpolate.interp1d(X, y, kind='linear', bounds_error=bounds_error)
```