MayaScene Fixes for reading scene:visible and custom attributes at the root
Reverted CachedConverter::convert() custom converter overload.

This reverts commit 6e257c879c5b804206b9f73b50586472c6ccd952, which was meant to have been reverted in 153df0c67d2cbe7389c0ff31e8eece7237523418, along with the rest of #9.
Added unit test for LRUCache::set().
Implemented tbb_hasher() for all LRUCache keys.

This will allow us to move to an implementation based on tbb::concurrent_unordered_map().
Moved LRUCacheBinding implementation details to unnamed namespace.

We don't need to export them.
Added function to test LRUCache threading.

This is useful both for testing performance and correctness. The GetterFunction does almost no work, making it easy to measure the raw performance of the cache itself. Ideally we'd have an IECoreTest python module to bind this into, but it's in IECore itself for now.

Also gave PythonLRUCache its own mutex typedef, so it doesn't depend on what should be private implementation details of the base class.
Reimplemented LRUCache for improved performance.

We now use a concurrent_unordered_map internally to avoid using a global lock for map accesses, and represent the linked list with fields within the map entries themselves, avoiding expensive allocations just to move an item to the end of the list.

This yields substantial speedups (reduction to 2-3% of original runtime) for the synthetic benchmark in testLRUCacheThreading, and a 40% reduction in runtime for a GafferScene::Instancer benchmark.

Also made the following changes :

- Removed unused includes
- Removed unused typedefs
- Reordered public methods for clarity - listing them in the order they're likely to be used aids understanding.
- Renamed Ptr template argument to Value. It's not compulsory to use a pointer type, and moreover we have tests where we don't.
Added LRUCache todo.

It may be that the speedups we've implemented already are sufficient in the real world, but it's worth noting that there is an alternative.
Improved LRUCache documentation.

Documented that GetterFunctions and RemovalCallbacks must never access the LRUCache itself. This is because that could result in deadlocks as locks are held while they are called.

Fixed formatting to improve clarity.
Removed bogus assertion from LRUCache.

As is clear from looking at the if() above, it's perfectly possible to arrive at that point with status==TooCostly.
Merge pull request #293 from johnhaddon/lruCacheTidyup

LRUCache optimisation
Merge pull request #292 from davidsminor/mayaSceneFixes

MayaScene Fixes for reading scene:visible and custom attributes at root
bumped version to 9.0.0-a1
Update Changes
IECoreRI now built for all python versions
Merge pull request #295 from davidsminor/coreRiPythonVersions

IECoreRI now built for all python versions
Fixed LRUCache hangs.

This fixes a bug whereby the LRUCache could get stuck in limitCost(), never able to meet the maximum cost requirement because an item had been cached but not yet placed in the list.

The improved test cases both expose the hang (they never completed without this fix) and also perform better checking of the cost counting.
Merge pull request #297 from johnhaddon/lruCacheFix

Fixed LRUCache hangs.
Changed DespatchedTypedData DataPtr & argument to Data *.

We should only be passing DataPtr & to signify a sharing or ownership, which is not generally the case with DespatchTypedData. This avoids the unnecessary creation and destruction of smart pointers, which in turn make unnecessary addRef() and removeRef() calls, which do have an overhead.

Also replaced some implicit conversions of Ptr to * with explicit calls to Ptr.get(), in preparation for a move to boost::intrusive_ptr.