Moved Cortex-specific functionality into new GafferCortex library and module.

The Gaffer core itself remains heavily dependent on Cortex, and always will, but Cortex is a huge beast, and it doesn't make sense to put everything Cortex related into the core of Gaffer. Here we're splitting out "end user" functionality such as OpHolders and ProceduralHolders, so that GafferCortex can be thought of as the user-visible presence of Cortex within Gaffer. This leaves behind a smaller libGaffer where the core concepts of Nodes and Plugs aren't confused by  non-core concepts like Ops and Parameters.

This commit doesn't move the test cases into GafferCortexTest, but instead leaves them in GafferTest with minor tweaks to accept the new TypeIds, but not to use the new namespace. The tests still pass due to the presence of the gafferCortexCompatibility.py startup file, which allows a grace period for dependent code to update to the new module layout.
Moved cortex related tests to GafferCortexTest module.

Updated test cases to use GafferCortex namespace rather than Gaffer - they now pass both with and without the compatibility config file. However, the GafferTest unit tests for the execute app and the dispatcher still rely on using GafferCortex functionality from the old namespace.
Fixed typename prefixes for ObjectReader and ObjectWriter.
Moved cortex related UI to GafferCortexUI.

All existing tests pass, making use of the compatibility startup file.
Moved CortexUI tests to CortexUITest module.

Tests now pass even without the compatibility startup file.
Moved Op browser mode from GafferUI to GafferCortexUI.
Moved ParameterisedHolderNodeUI to ParameterisedHolderUI.

This is in keeping with the naming for other UI files. Also protected the ParameterisedHolderNodeUI class since it hasn't been used externally yet and hopefully one day it can be implemented entirely using Metadata and standard UI features.
Removed ParameterisedHolder menu code from GafferUI.NodeMenu.

Added backwards compatibility through a startup file, and tested with the existing gui startup code.
Updated gui startup to use GafferCortex and GafferCortexUI.
Fixed a couple of references to Gaffer which should be GafferCortex.

Although these weren't causing problems because we have the backwards compatibility config files, we want all our code to use the right modules in readiness for a time when we remove the backwards compatibility.
Added a unit test for string substitutions in CustomOptions.

This didn't reveal the problem I was hunting, but more tests are always good.
Improved ExecuteApplicationTest.

By using assertEqual() you can actually see what the error message is.
Fixed StringPlug string substitution bug.

When a StringPlug received an input connection from another StringPlug whose value contained a substitution, we were incorrectly calculating the hash for the receiving plug, by not taking into account the substitutions. This was caused by the recent ValuePlug optimisation whereby ValuePlug::hash() traverses to the source plug and hashes the value held there - this bypassed the StringPlug::hash() override for the source plug. The solution is to perform the same "find the source first" optimisation in StringPlug::hash().
Fixed problem with ObjectToSceneTest.

It was relying on functionality that had been moved into GafferCortexTest.
Merge pull request #1049 from johnhaddon/substitutionBug

Fixed StringPlug string substitution bug.
Merge pull request #1048 from johnhaddon/gafferCortex

GafferCortex