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