Use type aliases names in type asString

Defining a type alias now creates a proxy with a name and uses that
name instead of the structure of the type when using asString. Applying
generics includes those types in the stringification as well. The
built-in types have been updated to include the generic information.

Built-in methods have been split out into a separate module as well, and
a method 'delegateTo' has been added to handle object inheritance.
Add modulo operator to numbers

The modulo operator with % was missing from the set of builtin operators
on numbers. The operator just defers to the JavaScript operator in the
same way as the other binary operators.
Add a system prelude with control structures

The prelude file in src/prelude.grace will now be used as the base
prelude definition of any module, though this can now also be customised
through the library interface. As usual, dialects override this new
prelude. The current prelude just holds some standard control
structures.

The module loading has been split off into its own module. This is
ignored for loading the prelude, which will use brfs to embed the
prelude file when generating the browser code.
Convert native objects when calling native code

Rather than having to manually convert builtin objects to their native
representation when invoking JavaScript functions, the lookup function
will generate a wrapper when it detects a JavaScript function that does
this automatically. This is handled by implementing an 'asPrimitive'
function which returns whatever the native representation of the object
is. Note that the existing asPrimitive* functions still exist, and some
builtin objects now implement multiple variants.

This change also tidies up the number type to include the builtin binary
operators.
Rename the raiseMessage() method to raise()

The shorter form of raise should be the one that takes a message, so
raiseMessage() has been renamed to raise(). The existing raise method
has been renamed to raiseDefault.
Adjust variable lookup and method overriding

A full variable lookup will search all scopes and every self value in
scope if a definition cannot be found in the immediate scope or self
value, and an ambiguity error occurs if multiple definitions are found.

Variables are no longer permitted to override methods in a super-object.
This avoids tricky situations where code that relies on variables having
values can be broken by an overriding variable.
Tidy up builtin boolean and list definitions

The andAlso() orElse() method has been relegated to short circuiting
booleans only, and replaced by the ifTrue() ifFalse() method and
companions ifTrue() and ifFalse(). Due to the issue with infinite
recurion on assertions, both ifTrue() ifFalse() and orElse() are both
untyped.

The doForEach() method on lists has been renamed to just do(). A 'Do'
type has been added to the prelude and the method for() do() has been
implemented as an associated control structure.