Optimised SceneInspector update.

Calls to _repolish() seem to be particularly expensive, so avoiding them is well worth it - nearly doubling the speed up update.

Also fixed broken Row.getAlternate() method.
Simplified SceneInspector.Diff into an abstract base class.

All the functionality for side-by-side diffs in frames is moved into the SideBySideDiff class. This allows more flexible subclassing of Diff.
Added Sets section to SceneInspector.

This uses a custom Diff type to show a diagram of the intersection and differences of two sets. SideBySideDiff isn't particularly suitable for this purpose as it has no section for showing the commonality between the two values, and sets are typically too large to be able to list their entire contents in the UI. This new form with the +N and -N labelling should also hopefully make much more sense in history tracebacks than my last attempt at this (when we have nodes for modifying sets rather than just creating them).

- Click to select objects in intersection or difference
- Drag to drag object names in intersection or difference
- Right click for history

Fixes #895
Fixed Display node for bucket sizes larger than the native tile size.

We were incorrectly applying the x offset of the transfer area within the bucket data, by not taking into account the number of channels (the source channels are interleaved). This hadn't been seen noticed till now because we'd never rendered with a 3delight bucket size greater than the Gaffer tile size.
Fixed SceneInspector inheritance display bug.
Merge pull request #1008 from johnhaddon/sceneInspectorSets3

SceneInspector Sets
Merge pull request #1009 from johnhaddon/displayIndexingFix

Fixed Display node for bucket sizes larger than the native tile size.
Added SceneProcedural::allRenderedSignal()

This static signal gets emitted every time the number of SceneProcedural instances that haven't been rendered yet falls to zero.
Clearing some caches after procedural expansion has finished

I'm doing this by connecting to SceneProcedural::allRenderedSignal in the GafferScene::ScriptProcedural
added Context::remove() method
used different form of erase() in Context::remove()
Added Context.__delitem__ python binding
made ScriptProcedural.allRendered private
Merge pull request #1014 from davidsminor/contextRemove

Added Context::remove() method
Merge pull request #1012 from davidsminor/postRenderSignal

Post render signal