Include missing name in type assertion failures

Failure to satisfy a type reported the value and the type with the
exception, but did not mention the missing method name. Now the type
matching raises a more specialised error that reports the first
signature name that was not a method in the object.

As part of this change, type proxies now inherit regular types,
providing specialised assert() and cast() methods that also report
incomplete types. In order to ensure consistency, no type proxy is
allowed to call any type proxy's pattern testing methods when they are
in the same type hoisting phase, as all declarations are now evaluated
before overwriting the definitions in the proxies. Two tests that ensure
this property are now present.
Ensure that inheritance preserves parameter counts

It was possible for inheritance to change the parameter and generic
parameter counts of methods, such that overriding a method did not
preserve the existing runtime definition of subtyping. Now an Invalid
Method error is raised if an overriding definition produces a mismatch
with the parameters in the super object.
Convert primitive method results to Grace objects

The lookup procedure pulls out methods from built-in Grace objects when
detecting JavaScript primitives as receivers of method requests, which
comes with the assumption that the outcome of the method was also a
Grace object. This was not necessarily true, particularly for lists, so
the outcome is now converted from a primitive.
Revert ambiguity, resolve to nearest definition

The ambiguity rules for lookups made inheriting from a dialect
practically impossible to use. As such, the ambiguity error has been
removed, and the lookup will always resolve to the first definition that
it finds. A test for a bug that existed in the old lookup system where
the most distant name was resolved instead of the closes has been added,
and the prelude setup has been tidied up.