Added RecursiveChildIterator.

This iterates over all the descendants of a GraphComponent in a depth-first fashion. Because this is pure C++ functionality, it doesn't fit neatly into our python driven unit tests. For now I've defined a c++ function to do the testing, and bound it into python to allow it to be called by the python tests. This seems better than maintaining a separate test framework, particularly because our experience with boost::test in Cortex hasn't been great. In future perhaps we should add our own TEST_ASSERT macros that communicate to the python tests via exceptions of some sort.
Enabled drag-reconnect for CompoundPlug children in node graph.

Previously we were only iterating over the direct children of the node to find plugs suitable for reconnection. Now we use a RecursiveChildIterator to make sure we visit the children of CompoundPlugs too.
Added FilteredRecursiveChildIterator.

The test case actually relies on some typedefs from an upcoming commit, but I wanted to commit this on its own so it can be seen in isolation for review - the typedefs affect loads of files with very repetitive changes.
Added typedefs for FilteredRecursiveChildIterator.

Also renamed ChildNoduleIterator to just NoduleIterator to match the rest.
GraphGadget reconnect using the new RecursivePlugIterators.
Merge branch 'recursiveChildIterator' into noduleLabels, so FilteredRecursiveIterator it available for use on this branch.
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.