Using mutex on all access to the internal directory nodes in StreamIndexedIO

The previous change introduced a bug where a multi-threaded access to the hierarchy could cause access to deleted SubIndexNode instances.
The solution was to use mutex before accessing the children of any DirectoryNode and for that I've added a function that returns a scoped_lock with the required access (read/write) only the directory actually requires locking (in case it has one or more SubIndexNode as child).
Instead of using one single mutex for all locations in the file, I've created a pool of mutexes that are chosen deterministically for the DirectoryNode to be accessed, in the attempt to avoid blocking threads too much.
Fixed StringData repr() to support newlines and quotes.

Since this now uses Python's own internal repr() implementation, it should support any combination of characters at all.

Fixes ImageEngine/gaffer#837
Catching converters in case they throw.

ToHoudiniGeometryConverter throws in certain situtations, so we're catching those to avoid a seg fault.
Improving exception messages for failed PrimitiveVariables.
Adding extra catch to SceneCacheNode::scene just in case.

This function is used from every SceneCacheNode in Houdini to get the SceneInterface, so we want to be as careful as possible. Note that this still suffers from Memory Allocation Errors, which seems to be somehow controlled by Houdini directly using UT_NoMemHandler...
Improving UI for Expand/Collapse buttons.

I've set the enable flag for these buttons based on current expansion state, and added a more menacing comment to the Collapse description.
Fixed VectorDataTest to account for StringData repr change.

Python defaults to single quotes where possible, but we were using double quotes previously. There is no change in the result of an eval( repr() ) expression.
Merge pull request #269 from andrewkaufman/catchExceptions

Improved Exception handling in Houdini SceneCache nodes
Fixed bug in CortexConverter SOP todo with multiple CortexObject primitives with the same name.

This was actually a bug in the DetailSplitter caching mechanism, which was failing to increment the MetaCount on GU_Details that it authored during validation.
Merge pull request #267 from ldmoser/streamIndexedIOmutexes

Using mutex on all access to the internal directory nodes in StreamIndexedIO
Merge pull request #270 from andrewkaufman/repeatNames

Fixed bug in CortexConverter SOP todo with multiple CortexObject primitives with the same name
Updating changes and bumped patch version
Merge pull request #268 from johnhaddon/stringDataRepr

Fixed StringData repr() to support newlines and quotes.
Updating changes and bumped patch version