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.