Fixed bug when caching hidden OBJs.

Hidded OBJs return null geometry unless we force otherwise.
SceneCache ROP is interruptable.

This is used to cancel long running local caches.
Using GA_AIFSharedStringTuple instead of GU_Detail::getUniqueStringValue

This was a recommendation by SideFx for speed improvements. It doesn't seem to have helped much in this case, but it didn't hurt, so might as well keep it.
Manually iterating the prims and checking for string matches.

Extracting a large asset (500k polys, 1800 named shapes) took 8 minutes. Profiling showed that GU_Detail copying and GU_Detail::getRangeByValue() took the largest amount of time. By looping over the prims ourself, we avoid both of those calls, and the extraction time drops to 1.5 minutes.
Adding the DetailSplitter.

Its a convenience class for extracting select bits of geometry from a GU_Detail. It is intended to improve performance when making multiple calls to split the same detail. The default use is splitting based on the name attribute, but any primitive string attribute could be used.
Using DetailSplitter in FromHoudiniGroupConverter.

The DetailSplitter simplifies conversion by name.
Using DetailSplitter in HoudiniScene.

HoudiniScene instances that refer to a SOP create a DetailSplitter during construction. Child scenes inherit the splitter of their parent, so only one splitter per SOP is ever created. Using the splitter during readObject reduces the cache time for the large asset (500k polys, 1800 named shapes) from 1.5 minutes to 35 seconds.
Simplifiyng retrieveNode().

Most use cases verify the SOP data themselves if necessary. Removed m_contentPath since it can be easily retrieved when needed. I wasn't able to remove m_nodePath because of complications resolving children via connection. It is not impacting performance, so I'm leaving it for the time being.
Replacing relativePath() with char* search functions.

This removes all calls to SceneInterface::stringToPath, which was the current bottleneck in the profile. Cache time for the large asset reduces from 35 seconds to 3.3 seconds with this and the previous commit.
Patch for loading multiple ieCoreHoudini plugins.

Houdini loads all plugins on the path, regardless of whether they have been seen before. This means that when installing things in a studio setup, several versions of the plugin may be loaded, for example a user install for testing and the central install. This commit prevents such situations from seg faulting, and instead prints a warning to stderr. Currently the only conflict will be the definition of GU_CortexPrimitive. Since the correct library will still be loaded, I think the warning can be ignored in most situations.
Updated IE build to build for all active python versions.
Updated IE options file for new python wrappers.
adding todo
Fixed IECoreAlembic to use GeometricTypedData appropriately.

Previously we were returning TypedData<vector<V3f>> which doesn't include the geometric interpretation, and isn't expected by much of the rest of Cortex. Now we use the appropriate GeometricTypedData type and correctly specify the geometric interpretation based on the information in the Alembic file.

Fixes #28.
Fixed IECoreRI test which explicitly specified a display with +.

It was working around the lack of support for multiple displays in IECoreRI::Renderer, and since that was fixed had been erroring.
Merge pull request #114 from andrewkaufman/houdiniPluginPatch

Patch for loading multiple ieCoreHoudini plugins.
Merge pull request #116 from johnhaddon/alembicFix

Fixed IECoreAlembic to use GeometricTypedData appropriately.
Hidding HoudiniScene implementation detail from the public constructor
Merge pull request #113 from andrewkaufman/ropCrashAndSpeedIssues

SceneCache Rop crash and speed issues
cortex auto instancing patch

added recursive mutex header to IECoreRI::RendererImplementation header

added hash method to a procedural in a test, to stop it complaining