Another rewrite of colour interpolation

Quickly hacked out idea - needs refactoring and commenting to outline
the approach taken to interpolate >2 colours with weightings