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.
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.
Override base asString as early as possible

The existing stringification extension in the compiler happened after
the object's constructor had run, meaning that objects would have the
base asString during their construction and the specialised form
afterwards. Now the extension happens alongside the check for
confidential overrides, at the top of an object's inheritance hierarchy
and right before any constructor code runs.

The default overriding checker has been updated to handle existing code
in an object's prototype, meaning the asString method can no longer be
overridden by a variable.