OCMockClassObject now specifically adds support for partially mocking class objects.

It has been renamed to OCPartialMockClassObject, and now implements
an OCPartialMock interface shared with OCPartialMockObject.

This allows it to leverage the existing functionality defined by the
OCPartialMockRecorder and OCMRealObjectForwarder, and clarifies
its function.

Support for purely mocking class objects, i.e. an analogue of OCClassMockObject
for mocking class methods rather than instance methods,
will be added in a subsequent commit.
Partial class mocks now use the runtime forwarding functions directly as forwarding IMPs.

This removes the possibility, however remote, that the metaclass
would define whatever selector we chose to pass to +[NSObject
instanceMethodForSelector:] to retrieve a forwarding IMP.

Also, +[NSObject instanceMethodForSelector:] is actually documented
to generate an error for invalid inputs, not return a forwarding IMP.

Lastly, using the runtime forwarding functions directly allows us to
use the stret variant as appropriate.
Partial class mocks can now forward methods to the real class
and stop mocking their class.

By storing the original IMP of a mocked method under an alias
when the mock is set-up, and restoring it when the mock is torn down.

Partial class mocks stop mocking the class either in response to an explicit
-stopMocking call, or when dealloc'd, if necessary.
Simultaneous mocking of the same class object is now prohibited.

Because it's not possible to isolate the method overrides as can be done
for a partial mock of an instance.
Corrected an error message.
OCMockClassObject has been redefined to add support for mocking class objects.

A selection of unit tests has been drawn from those used to test class mocks
and reimplemented for class object mocks.
OCPartialMockClassObject now inherits from OCMockClassObject.

Completing a hierarchy analogous to OCPartialMockObject : OCClassMockObject.
Before setting up a forwarding imp for a partial mock class object,
retrieve the original IMP via another method than class_replaceMethod.

class_replaceMethod is described to return "The previous implementation of the method
identified by name for the class identified by cls." However, it turns out that
it only considers the previous implementation *within the class* -- not its superclasses.
class_replaceMethod will thus return NULL if the class being mocked doesn't itself
define the mocked method, but rather its superclass.

This will lead to us adding back the original method (under our prefixed name)
with a NULL IMP.

method_getImplementation, on the other hand, returns the IMP of the method
on the superclass.
Merge branch 'mock_class_objects'

* mock_class_objects:
  Before setting up a forwarding imp for a partial mock class object, retrieve the original IMP via another method than class_replaceMethod.
  OCPartialMockClassObject now inherits from OCMockClassObject.
  OCMockClassObject has been redefined to add support for mocking class objects.
  Corrected an error message.
  Simultaneous mocking of the same class object is now prohibited.
  Partial class mocks can now forward methods to the real class and stop mocking their class.
  Partial class mocks now use the runtime forwarding functions directly as forwarding IMPs.
  OCMockClassObject now specifically adds support for partially mocking class objects.