String substitution optimisation

Here's another one to add to the pile of reviews. After all the SceneReader optimisations, I was finding that the next obvious thing showing itself in profiles was the string substitution we apply to all StringPlugs automatically. This pull request implements an optimisation for that, going through a faster code path when a string contains no variable references, giving a 9% reduction in runtime for my animation playback test case.