Optimised PathMatcher.

Added new methods for adding and removing paths as vector<InternedString> - this avoids all the overhead of tokenization for cases where the path already exists in tokenized form.

Changed internal representation to use InternedString rather than std::string. This is much more compact than the old representation, since most strings we put into a PathMatcher will already have an InternedString representation somewhere (from the SceneNodes or from IndexedIO).

PathMatcherTest.testLookupScaling() shows a 67% reduction in time to build the PathMatcher, a 78% reduction in time to perform the lookups, and a 70% reduction in memory usage.
Interleaved hash/compute methods in SceneReader.cpp.

It's much easier to verify that the implementations correspond appropriately when they're adjacent in the source code. We should do things this way as a matter of course in all the code.
Implemented loading of tags as sets in SceneReader.
Adjusted SceneProceduralTest for new SceneReader behaviour.

For the test, we need a node which will throw during procedural expansion. The SceneReader no longer fits that bill now that it implements computeGlobals(), as it will now throw during construction of the SceneProcedural. Using the Text node with an invalid font gives us an exception at the right time.