Adding thread-safe attribute read to SceneCache

This problem is mainly detected when the root location of scene caches have attributes. The root scene caches are returned by our SharedSceneCache mechanism and therefore parallel threads could be querying at same time.
Added a unit test to demonstrate that.
Added support in IECoreNuke::DeepImageReader for ZBack channels.
Updated the SConstruct to enable the use of Deep EXR with IECoreNuke.
Added a test case that checks that the IECoreNuke::DeepImageReader correctly adds the ZBack channel if one does not exist.
Merge pull request #263 from ldmoser/threadSafeAttributeReadSceneCache

Adding thread-safe attribute read to SceneCache
Working around a bug in Maya for meshes with 6 or more UV sets.

When calling fnMesh.numFaceVertices() (and other MFnMesh API calls), given a mesh with 6 or more UV sets, which has never been evaluated before, the first call throws kFailure. From within the ToMayaMeshConverter itself, the output plug appears fine, and the API calls evaluate as expected. Despite this, the resulting mesh cannot be evaluated on the first try. Making the mesh visible, or making any attempt to evaluate it, will trigger some unknown internal updating, and subsequent attempts to evaluate it will succeed. Meshes with 5 or less UV sets do not suffer from this problem.

I've added a test to FromMayaMeshConverter which demonstrates how this issue can cause a seg fault, and I've patched FromMayaMeshConverter with a silly fix, so the problem does not occur. Unfortunately, I could find no solution that solved the overall problem, and I've added a test to ToMayaMeshConverter which demonstrates the issue.
Fixing precision issue.
Merge pull request #264 from andrewkaufman/meshConvertCrash

Mesh converter crash with many UV sets
Fixed a bug in the SceneCacheReader that was preventing animated scene caches from displaying properly.
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