Added a basic framework for the ImageTransform node.
Basic working version of ImageTranform.
Changed the Transform2DPlug so that the matrix() method now takes a Format so that it can convert the result from Image space to Gadget space.
Added file import/export.
Added first implementation of the Reference node.

This is basically functional, except for the fact that reloading doesn't work at all - it just keeps stacking up copies of the internal nodes.
Fixed reload in Reference nodes.

Nodes and plugs no longer accumulate copies when a reference is loaded again. We attempt to reuse old external plugs where possible (when they correspond to the newly loaded external plugs) so that the outside of the node changes as little as possible from an observers point of view.
Added failing test.
Fixed unwanted deletion of custom plugs on Reference nodes.

Previously plugs that were unrelated to the reference were being deleted when a reference was reloaded. This would include plugs added by the ui for keeping track of node position etc. Now plugs are only removed if they are considered part of the reference - if they have connections to the nodes within the reference.
Fixed save/load of scripts containing Reference nodes.

Previously, the Reference node was allowing its referenced plugs to be serialised into the main script as well, causing them to double up on reload. It now marks them all as non-dynamic after loading to prevent this behaviour.

Also modified the serialisation for Node so that child nodes of nodes are not serialised - this is the behaviour we need for the Reference but I think it holds that most Node-derived types wouldn't want their child nodes serialising - typically they would be created on construction to perform some preprocessing of inputs and wouldn't be created by the user. The exceptions to this rule are the ScriptNode and Box, whose serialisers have been updated to ensure that their child nodes are still serialised.
Stopped unwanted plugs from being saved by Box::exportForReference().
Added spacing argument to CompoundNodule constructor.

This allows a user-specified spacing between the child nodules.
Added plug labels for hovered nodes.

- Added setLabelVisible/getLabelVisible to StandardNodule. Labels are oriented using NodeGadget::noduleTangent(), but are pushed away from the vertical to make them more readable.
- Added setLabelsVisibleOnHover()/getLabelsVisibleOnHover() to StandardNodeGadget. This shows the Nodule labels only when the node is hovered.
- Increased spacing between Shader nodules to make the text more legible.

This works, but because Gadgets don't receive enter/leave events during drags, we still need a mechanism for showing the labels when the node is being considered as a drag target.
Added iterators for StandardNodules.
Prevented StandardNodule from making invalid connections.

Previously it was allowing an output of a node to be connected to an input of the same node.
Added StandardNodeGadget connection snapping.

When a connection is dragged onto the node itself, it finds the closest appropriate nodule and forwards the drag/drop events on to it. This makes it much easier to make connections as less precision is required from the user.
Made label popups less annoying.

They now only popup when hovering over a nodule rather than anywhere in the node. All the labels for the inputs or all the labels for the outputs are shown at a time, but not both together.
Removed dead code.
Added popup plug labels when dragging a connection to a node.

Only those plugs which would accept the incoming connection are labelled.
Fixed Connection endpoint snapping.

Connection endpoints now snap correctly to the destination nodule, even when the NodeGadget is the actual destination of the drag.
Made unconnected endpoint tangents neutral.

Prior to this they pointed in the direction of the last thing they were connected to, which didn't look right when then approaching a node with a different orientation.