Added custom diff support to SceneInspector.

The UI classes now accept a diffCreator argument, which can be passed a callable which will return a subclass of Diff. B

API Incompatibility : SceneInspector.DiffRow() now takes an optional diffCreator argument instead of a compulsory diff argument.
Added set membership section to SceneInspector.

Fixes #930.
Fixed crashes when passing None to PathMatcher python methods.

Boost python will happily extract a NULL pointer from None when asked for any pointer type, so we need to guard against it. In this case we can replace some wrapping functions and allow the implicit ScenePath conversion registered in ScenePlugBinding.cpp to do the work (this was added after the offending code).
Fixed SceneInspector set membership section for invalid paths.
Fixed display of invalid paths in SceneInspector.

Inspectors can't return HTML now, because we escape HTML characters. Also simplified disabling of per-character diffs now we have a proper way of doing it.
Added accessors for the buttons on VectorDataWidget.

Fixes #1003.
Merge pull request #1005 from johnhaddon/pathVectorDataPlugValueWidgetAccessor

Added accessors for the buttons on VectorDataWidget.
Merge pull request #1001 from johnhaddon/sceneInspectorSetMembership

SceneInspector set membership section
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
Split the style sheet out from Widget.py.

Having a huge amount of literal text in amongst the code was getting quite unwieldy.
Reimplemented MultiSelectionMenu using MenuButton.

They both need to do the same thing, and there's no point in duplicating the code. I do wonder if MultiSelectionMenu shouldn't _have a_ MenuButton rather than _be a_ MenuButton, but since it derived from Button previously I've kept it this way for backwards compatibility (ChannelMaskPlugValueWidget for one is relying on this).