Dirty propagation

This fixes problems with dirty propagation, caused by many nodes specifying CompoundPlugs as dirty when they really meant that the children of that compound were dirty. Now rigidly enforcing that dirtiness is only propagated (and can only be queried for via DependencyNode::affects()) at the level of leaf plugs. Dirtiness is still signaled on parent plugs when their children are dirtied, for the convenience of observers. This fixes numerous update problems in the Viewer.

During the process of doing this I discovered that the SceneHierarchy editor was performing redundant updates because it would receive multiple path changed signals before actually getting the chance to redraw. These are now deferred to the next idle event so they only occur once.