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.
Resolve confidential errors after object creation

The confidential override error was raised if a method was added that
was not confidential while a confidential method was already attached to
the object. However, this was always the case when a confidential method
was already attached, because the annotations on the new method had not
been run yet. Now confidential validation is performed after annotations
are run.