RecursiveChildIterator and drag reconnect fix.

The RecursiveChildIterator 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.

I've then used the new iterator to fix the GraphGadget's drag-reconnect behaviour to work for the children of CompoundPlugs, such as shader parameters.