Store stub ivars on `Assert` not on the object being stubbed

This changes to storing `Stub` instances on `Assert` instead of
the object that is being stubbed. This avoids cluttering the
objects inspect which, by default, display all ivars for an object.
It also avoids the `Stub` having to store the object it is
stubbing so it can remove the instance variable. Since the names
of the ivars are already object-method specific, they can all
be stored on `Assert` without any issues. This also doesn't
require using the `Assert.stub` interface and will work without
issue when using `Stub` alone.
Merge pull request #205 from redding/jcr-ivars-on-assert

Store stub ivars on `Assert` not on the object being stubbed
Match arity when defining proxy method with stubbing

This updates the stubbing logic to define its proxy method with
matching arity to the method being stubbed. This ensures that
singleton methods extended/inherited on a class will properly
check their arity. For these cases, assert will define a proxy
method that is aliased instead of using the inherited/extended
method when. This is because using the inherited/extended method
can effect other singletons and ensures assert is only modifying
the current object it is working on. Previously, the proxy method
was always defined to take any args, which had the side effect
of allowing any number of args when stubbing or calling the method.
This is against the spirit of assert's stubbing, so this updates
the proxy method to match the arity of the method it is proxying.
This allows the arity checking to properly ensure that a stub is
created or called with the proper number of args.