Initial commit of new interpolator classes

Break up into interpolator and caching interface.

Allows us to easily write + use new interpolators to handle e.g.
midpoint method.