Moved GafferScene Options bindings to separate file.

We need to continue to thin down GafferSceneModule.cpp because it has massive compile times.
Added a GafferScene::Set node.

This will be used to allow users to manage sets of named locations as part of their graph flow.
Typedefed PathMatcherData into GafferScene namespace.

It was always meant to be defined there, but wasn't because of problems using the Cortex macros in another namespace. The new typedef matches what we do for GafferImage::FormatData, and means we can tidy up the code referring to PathMatcherData.
Fixed InteractiveRenderManRenderTest for slower machines.
Replaced forwardDeclarations with a private set for lights.

The "gaffer:forwardDeclarations" global entry was our slightly ad-hoc way of tracking the location of lights in the scene. It is now replaced with a private set called "__lights", and all the old code for keeping forward declarations accurate when the hierarchy changes has been replaced with more general purpose code for keeping sets in sync with the hierarchy. This both makes sets more useable and pleasingly tidies up one of the more untidy corners of Gaffer.
Improved GafferScene::Set documentation.

It implied that sets only held locations which referenced objects, whereas actually they are happy to reference any location at all.
Fixed PathMatcherData references for GCC 4.1.2.
Optimised PathMatcher.

Added new methods for adding and removing paths as vector<InternedString> - this avoids all the overhead of tokenization for cases where the path already exists in tokenized form.

Changed internal representation to use InternedString rather than std::string. This is much more compact than the old representation, since most strings we put into a PathMatcher will already have an InternedString representation somewhere (from the SceneNodes or from IndexedIO).

PathMatcherTest.testLookupScaling() shows a 67% reduction in time to build the PathMatcher, a 78% reduction in time to perform the lookups, and a 70% reduction in memory usage.
Interleaved hash/compute methods in SceneReader.cpp.

It's much easier to verify that the implementations correspond appropriately when they're adjacent in the source code. We should do things this way as a matter of course in all the code.
Implemented loading of tags as sets in SceneReader.
Adjusted SceneProceduralTest for new SceneReader behaviour.

For the test, we need a node which will throw during procedural expansion. The SceneReader no longer fits that bill now that it implements computeGlobals(), as it will now throw during construction of the SceneProcedural. Using the Text node with an invalid font gives us an exception at the right time.
Improved SceneReader UI.

- Moved to a separate file. We should do this for all UIs as we go through and add metadata for each node type.
- Added Metadata.
- Added right click menu for toggling tags on and off in the tags and sets plugs.
Merge pull request #831 from johnhaddon/sets

Sets groundwork
Replaced GafferScene::Render base class with RendererAlgo.h header.

The base class didn't provide any useful functionality as far as abstraction was concerned - it was just a place where we put utility functions the derived classes needed for talking to renderers. Since that functionality could be useful elsewhere, it makes more sense to provide it in a namespace available to all.

There is similar functionality buried in SceneProcedural that we should move to RendererAlgo.h at a later date. For now we're just moving the code from the Render class, because we need to move the Render class out of the way to do implement some needed refactoring of the Executable code.
Simplified Executable nodes.

I originally suggested to Lucio that he develop the Executable nodes using multiple inheritance of an Executable interface class, so that nodes could be both say a SceneNode and also Executable. That turned out to be a bad idea because the class hierarchy was rather confusing and it put the onus on developers to remember to call various methods to add plugs, test inputs were accepted etc. This led to problems like the crash bug in #681, and was just generally a bit more awkward than necessary.

This commit simplifies things so there is now just a single ExecutableNode base class which fits in nicely with the DependencyNode and ComputeNode base classes. The implementations for the various derived classes are now a fair bit simpler, and the bindings are performed with a new ExecutableNodeClass which matches nicely with the NodeClass and DependencyNodeClass we already have.
Revised todo for a custom ExecutableNode UI.
Added return value check for ExecutableRender system command.
Added todos for ExecutableNode::Task.