Improved shader + tests

Split the main shader into two passes - a Phong pass and a second pass
(which currently only performs colour quantisation, but will be used for
antialiasing).
Implemented the CIEDE2000 colour difference formula - CIELAB isn't quite
perceptually uniform, e.g. the sRGB colour (255, 57, 57) is closer to
(200, 0, 0) than (255, 0, 0), leading to an ugly dark band around the
bright area. A better colour difference formula resolves this issue.
Added a couple of extra unit tests when I was debugging LAB conversion
(turns out the bug was somewhere else anyway).