ENH: New interpolator API implemented Linear

This PR completes the work conducted by @pelson and @bjlittle to add ndlinear interpolation to iris (with the newly proposed interpolation/regridding API).

```Python
import iris
import iris.analysis

fnme = iris.sample_data_path(...)
cube = iris.load(fnme)
sample_points = [['longitude', [6]]]
interp_cube = cube.interpolate(iris.analysis.Linear(), sample_points)
```

PR from @pp-mo is on its way to add a single unit test and slight enhancement to raise an exception for the reverse order monotonic circular coordinate case.

Proposed future changes/observations:

*  Accepting single coord-value pairs as well as iterable of iterables.  This extends from all high level wrappers (experimental linear/ cube/interpolate), down to the low level LinearInterpolator class.
i.e.
```Python
# Not supported
cube.interpolate(scheme, (coord, value))
# Instead of
cube.interpolate(scheme, ((coord, value)))
```

* I would suggest that collapse_scalar belongs to the cube interpolate collapse and that this logic should exist there, however, it has nothing to do with interpolation itself and so should not exist in the underlying classes.

*Background:*
A number of changes with CML relate to precision changes, mostly from dtype conversions (especially in the case of mixing data and coordinates of different dtypes).  Such tests have been enhanced to capture real values with a specified tolerance instead of the checksum method currently in place for many of the legacy tests.