Ensure delegation sets the appropriate self value

The value of self in a Grace-defined method is always bound to the
surrounding scope, even if the actual method is called with a different
context. Now Grace methods will look at the context they were called in
and swap out the calling self if the two are different. This allows the
delegateTo() method to set the self value to the calling object.

The default stringification has also been tidied up to account for calls
to asString during the object's creation. All objects created by the
interpreter will now have a custom asString, though this may be
overridden.