Context variables flowing down the graph

For workflow reasons, it would be convenient if string subsitutions could flow down the graph, so eg a texture path could be defined on an asset before it's merged in to the hierarchy, and used in downstream shader assignments. This commit allows you to achieve that effect in ShaderAssignments by adding a CompoundObject called "gaffer:contextVariables" to the attributes, containing the string substitutions/context variables you require.