A complete re-write of the cubic interpolation code. The key change is that there is a new layer of abstract, a Array object that the interpolator depends on. The Array provides a one dimension or two dimensional array like interface independent of the underlying representation of the data. Also included here is support for vector valued functions. Change-Id: Ica68f03778cf0d84192db00cd55653f8b4124d51