Added slight speedup for Instancer name computation.

Now allocates the right amount of memory upfront instead of continually resizing the array. This gives ~10% speedup in a simple benchmark.
Improved Instancer bound hash computation.

It now correctly combines the hashes for each instance, rather than actually computing the bound prematurely. This gives an approximately 15% speedup in a simple benchmark.
Removed unnecessary memory allocation from Instancer::instanceContext().

This knocks nearly 20% off the runtime for the hashing of the bounds, and should have similar benefits elsewhere.
Removed unnecessary Context copying from Instancer::hashBranchBound().

This further doubles the speed of this method.
Knocked a further 10% off Instancer bound hashing.

Since we already know the instance index in this one case, there is no need to go getting it from a string->int conversion.
Optimised Instancer::computeBranchBound().

This now uses the same method as is used in hashBranchBound(), reusing a single context for each evaluation of the input. This halves the execution time for bound computation.
Parallelised Instancer::hashBranchTransform().

Because the computation of bounds generally occurs before traversing to the children, the hashing of the union of the bounds of all the instances actually represents a serial bottleneck, which can be quite large when there are a large number of instances. Parallelising this operation reduces the bottleneck, and stops cores sitting idly waiting for work to do.

This gives ~1.8x speedup on a 2 core laptop and ~5.6x speedup on a 6 core workstation.
Parallelised Instancer::computeBranchBound().

This gives similar performance improvements to the previous commit.
Merge pull request #893 from johnhaddon/instancerOptimisation

Instancer optimisation