generic linear interpolation; should support dimension checking types etc by virtue of using fully generic intermediate values.