Optimised ComputeNode::hash().
Optimised ComputeNode::hash().

The call to relativeName() was expensive because it was allocating memory. It's quicker to just iterate up the hierarchy ourselves and directly append each name we find along the way. I had tried optimising this in the past, but never got any measurements that confirmed a speedup. Now we've got much superior performance from temporary Contexts, the relativeName() cost comes through more clearly and there are obvious measurable benefits. A simple Constant->Reformat benchmark shows ~14% reduction in runtime, and a SceneReader benchmark shows a small but measurable improvement.

Also added some documentation for why the hash is computed the way it is.

hradec/gaffer,andrewkaufman/gaffer,johnhaddon/gaffer,johnhaddon/gaffer,boberfly/gaffer,ivanimanishi/gaffer,appleseedhq/gaffer,chippey/gaffer,chippey/gaffer,appleseedhq/gaffer,chippey/gaffer,ivanimanishi/gaffer,andrewkaufman/gaffer,boberfly/gaffer,GafferHQ/gaffer,ImageEngine/gaffer,lucienfostier/gaffer,ImageEngine/gaffer,appleseedhq/gaffer,andrewkaufman/gaffer,chippey/gaffer,cedriclaunay/gaffer,johnhaddon/gaffer,cedriclaunay/gaffer,ivanimanishi/gaffer,ImageEngine/gaffer,ivanimanishi/gaffer,lucienfostier/gaffer,goddardl/gaffer,GafferHQ/gaffer,goddardl/gaffer,cedriclaunay/gaffer,cedriclaunay/gaffer,GafferHQ/gaffer,GafferHQ/gaffer,johnhaddon/gaffer,hradec/gaffer,hradec/gaffer,lucienfostier/gaffer,lucienfostier/gaffer,goddardl/gaffer,johnhaddon/gaffer,GafferHQ/gaffer,hradec/gaffer,appleseedhq/gaffer,hradec/gaffer,andrewkaufman/gaffer,ImageEngine/gaffer,andrewkaufman/gaffer,boberfly/gaffer,goddardl/gaffer,boberfly/gaffer