Added failing test for nested Boxes.

It seems that the creation code is recursing down to nodes within nodes and promoting internal plugs unnecessarily.
Added RecursionPredicate to FilteredRecursiveChildIterator.

The existing Predicate dictated what type of GraphComponents would be visited by the iterator, but provided no means of specifying when recursion should happen - so the iterator would traverse the entire tree looking for items matching the predicate.

The new RecursionPredicate controls the pruning of the recursion, providing an easy means of avoiding recursing into parts of the hierarchy within the iterator itself, without having to manually prune all the time. The default value for this predicate keeps compatibility with existing code.
Redefined RecursivePlugIterators to not recurse to other nodes.

Prior to this, when iterating the plugs on one node, the iteration would also recurse to the plugs of any child nodes of the root node. This is not what we want generally, and not what our current use cases of the plug iterators assume. This fixes the recently added nested Boxes bug, and no doubt a number of other problems which were biding their time before showing themselves.

It's still possible to perform the previous sort of recursion using a custom FilteredRecursiveChildIterator typedef if necessary, but no typedefs are provided for it out of the box because it seems to not be a common pattern.