Added a generic Switch node.

This is templated on its base type, and implemented in a totally generic way so it should in theory work with any sort of ComputeNode as it's base. The intention is to use it to implement a SceneSwitch and an ImageSwitch, but in this commit the functionality is tested with simpler types.
Renamed SceneContextProcessorBase to SceneMixinBase.

This is in preparation for using it with Gaffer::Switch to produce a SceneSwitch. The new name reflects its ability to be used with any of the Gaffer mixin classes - this isn't quite the case yet but the upcoming commits to implement SceneSwitch will correct that.
Added a SceneSwitch node.

This simply mixes together SceneMixinBase and Switch and sits back and watches the results.
Separated bindings for Scene mixin classes.

GafferSceneModule.cpp takes way too long to compile - we need to continue splitting out sensible little chunks into their own files.
Added ImageTimeWarp, ImageContextVariables and ImageSwitch.

These are implemented using the same mechanism as SceneTimeWarp, SceneContextVariables and SceneSwitch - simply mixing in functionality from the generic classes in the Gaffer module.

Deprecated GafferImage::Select as it is now superceded by ImageSwitch - it remains in the build for backwards compatibility but has been removed from the node menu.
Added DependencyNode compatibility to Switch class.

Prior to this, Switch needed to derive from ComputeNode so that it could implement switching using hash() and compute(). Now it can also derive from DependencyNode, in which case it implements the switching by making an internal connection from the appropriate input to the output.
Added a ShaderSwitch node.
Stopped ShaderAssignment rejecting inputs of unconnected Switches.

Also fixed a bug which meant it would accept invalid inputs if it was inside a Box - the test in acceptsInput() was just checking whether or not there was a Box anywhere above the source plug in the hierarchy, when it should have only been accepting Boxes immediately above the plug.
Improved ShaderSwitch for use with RenderMan coshaders.

Added a test case that demonstrates the use of a ShaderSwitch to switch between coshaders within a network. Improved Switch::acceptsInput() so that once a ShaderSwitch has an output connection, it won't accept any branches which aren't compatible with that output.
Updated Changes file.
Fixed incomplete SwitchTest.testAffectsIgnoresAdditionalPlugs().
Added enabling/disabling to ContextProcessor.

The ContextProcessor was written before the DependencyNode enabledPlug() and correspondingInput() mechanism was defined, so it didn't implement it at all. It did however inherit enabled plugs from SceneProcessor and ImageProcessor which made it look like it should. Now it correctly implements them, passing through a perfect (cache sharing) copy of the input when disabled.

This provides proper enabling/disabling for SceneTimeWarp, ImageTimeWarp, SceneContextVariables and ImageContextVariables.
Fixed SubTree dirty propagation.

It wasn't declaring that inPlug() affected outPlug().
Allowed RenderManShaders to have connections from empty ShaderSwitches.

Sometimes it's easier to wire up a switch before you wire up its inputs.
Improved Node::plugSetSignal() behaviour.

The signal is now emitted for all the outputs of the plug being set - otherwise we couldn't use plugSetSignal() effectively for plugs which had been promoted to Box level. With this new change, the Switch node can now have its index plug promoted, as demonstrated by the two new test cases.
Merge pull request #686 from johnhaddon/switch

Switch node
Bumped version to 0.87.0 and updates Changes file.