Documented unused member in IECorePython WrapperGarbageCollector.

It can be removed for Cortex 9.
Added todo to remove unnecessary parts of RefCounted binding API.
Added an improved Python wrapping mechanism.

There is significant overhead in acquiring the GIL and entering python looking for virtual method overrides, and this has been showing up in several profiles recently, and also badly affecting thread scaling. Often the overhead was being incurred for classes which were wrapped but for instanced which weren't actually subclassed in python or defining any overrides.

This new mechanism detects whether or not an object is subclassed in Python at construction, and avoids ever entering Python looking for overrides for non-subclassed objects. It also avoids creating reference cycles and the associated garbage collection in this case.

Additionally, the provision of wrapper classes specific to different base classes makes wrapping a large class hierarchy much easier and less error prone. The RunTimeTypedWrapper automatically adds the appropriate virtual method forwarders whereas before every piece of wrapping code had to manually insert the IECOREPYTHON_RUNTIMETYPEDWRAPPERFNS macro. This style of wrapping has been in use in Gaffer for a while and has worked well there.

Currently, none of the existing Cortex bindings are using the new wrapping mechanism - for now it is intended to be used in Gaffer first where the performance benefits will be felt the most.
Added todos for removing the old wrapping mechanism.
Replaced intrusive pointer with raw pointer in RefCounted isSame().

Intrusive pointers come at a cost, and there's no need to use them here.
Added RefCounted equality and inequality bindings.

Prior to this we were relying on the built in Python defaults, which compared equal only between the exact same python objects. Since we can't guarantee that a single RefCounted object is always represented by only one Python object, this default doesn't always give us the right answer. This has always been a problem for non-wrapped objects, but is now a problem even for wrapped classes if they use the new style wrappers and haven't been subclassed in Python. Ideally in the future we'll fix the object identity problem once and for all, for both wrapped and non-wrapped objects, but for now this is a good improvement.
Added RefCounted __hash__ binding.

The default hash is based on the address of the Python object, basing it on the address of the underlying C++ object prevents issues caused by two python objects referencing the same underlying RefCounted object.
Tidied up new wrapper code.

Fixed a duplicate method name in RefCountedTest, fixed a typo in RunTimeTypedBinding.h and deprecated the old constructor for WrapperGarbageCollector.
Merge pull request #239 from johnhaddon/improvedWrappers

Improved Python Wrapping