topic/PLAT-6858

This adds a new interpolator (ProductInterpolator1D) that for a set of knots x and y uses a supplied base interpolator to interpolate on x and x*y - the interpolation result is divided by x before being retuned so the user just sees an interpolation on x-y. 

Financial applications include interpolating on the product of the zero rates and time (equivalent to interpolation
on the log of the discount factors) and interpolating on the total variance (sigma-squared multiplied by time).
Can this boolean be avoided some how? Perhaps via a new constructor in the base class or a `.withZero()` style behaviour. Else it needs to be made clear that this doesn't modify the underlying data and that when the getter is called a new item is built.