Added a new test for SplinePlug.

I wrote this while hunting down a problem that turned out to be unrelated, but you can never have too many tests...
Added spline parameter support to RenderManShader::loadShader().

Splines are represented as a pair of shader parameters called <name>Positions and <name>Values, and which are mapped to a single SplinePlug called <name>. UI to follow.
Reintroduced SplinePlugValueWidget and SplineWidget.

SplineWidget now uses the appropriate colour transform for the display, and gets the curve the right way up (Qt origin is top left). SplinePlugValueWidget uses ramp drawing mode for colour splines.
Fixed RenderManShaderUI to take into account spline parameter name munging.
SplinePlug fixes.

A medley of fixes relating to the SplinePlug :

- Implemented SplinePlug::createCounterpart()
- Made CompoundPlugSerialiser public so it can be used by derived classes
- Fixed SplinePlug serialisation.
- Removed redundant setValue() calls in ValuePlug serialisation - values are now set only on the leaf plugs. Fixes #2.

Among other things this now allows SplinePlugs to be happily saved and loaded, cut and pasted, and promoted to Boxes.
Replaced smart pointers with raw pointers in SplinePlug API where appropriate.
Improved SplinePlugValueWidget drawing.

SplinePlugValueWidget now supports highlighting. SplineWidget now correctly paints within a border defined by the stylesheet, and caches the computation of the gradient used for drawing the ramp.
Fixed LabelPlugValueWidget to deal with plug == None case.

Also documented that derived classes should be able to handle plug == None in the PlugValueWidget.setPlug() comments. Currently, not all derived classes support this properly.
Fixed CompoundNumericPlugValueWidget.setPlug().

Previously, it wasn't updating the plugs referenced by its child NumericPlugValueWidgets.
Fixed NumericPlugValueWidget to handle plug == None and changing plug type.
Added support for multiple positions in Slider classes.
Stopped representing duplicate endpoints as SplinePlug::pointPlugs().

Storing them duplicated made it very hard for scripts and the ui to keep things shipshape. The multiplicity of the endpoints is now calculated by SplinePlug::setValue() and stored on a new endPointMultiplicity plug. SplinePlug::getValue() then uses the value stored to restore the duplicate endpoints. This allows us to correctly round-trip values through the SplinePlug while maintaining a more manageable internal representation.
Fixed ColorPlugValueWidget bugs.

It now generates undo events when the colour is edited via the dialogue. It also updates the plug displayed by the dialogue when ColorPlugValueWidget.setPlug() is used to change the plug.
Added support for variable number of positions in Sliders.

This is controlled with the setSizeEditable/getSizeEditable and setMinimumSize/getMinimumSize methods. Clicking empty space adds a position, and delete removes the selected position. Also added nudging of the selected position using left/right cursor keys.
Added colour ramp editing support.

Clicking on a ramp in the node editor launches a dialogue to allow editing.

Fixes #286.