Improved dirtiness propagation.

This ensures that dirtiness will only be signalled once for any given plug during dirty propagation, and that all signalling is performed at once after the dependency traversal. Prior to this we could end up doing duplicate signalling and also be emitting signals while the graph was still being edited by slots connected to plugSetSignal() and plugInputChangedSignal(). See comments in DependencyNode.h and DependencyNode.cpp for more details.

We also now emit plugDirtiedSignal() when a value has been edited with ValuePlug::setValue() - this means that observers need only ever use plugDirtiedSignal() instead of also having to use plugSetSignal().
Removed use of plugSetSignal() where possible.

Because plugDirtiedSignal() is now also emitted when values change via ValuePlug::setValue(), we can drop the use of plugSetSignal() for updating UIs. This is simpler, more efficient, and prevents updates being performed while the node graph is part way through being rewired.
Merge pull request #543 from johnhaddon/deferredDirtyPropagation

Improved dirtiness propagation