Add a stop method to halt a chain of tasks

It is now possible to stop an executing task and its dependencies by
calling the stop method. This method has no effect on completed tasks,
but will cause currently pending tasks to be rejected with an
InterruptError. Use of stop propagates down a chain of tasks, stopping
all dependent tasks. There are no guarantees as to how quickly all tasks
will be stopped, and the method will not stop concurrent tasks that were
spawned by, but are not in, the dependency chain.

The external interpreter methods now each return a function that can be
used to stop the underlying task.
Modify outer semantics to search all of scope

The outer semantics have been changed to work like super, where outer
may only appear as the receiver of another request. Outers can no longer
be chained, and ambiguities must be resolved by naming outer objects.
Tidy up inheritance and super semantics

The use of self inside an inherits request is now banned, with the same
Incomplete Object error that occurs when referencing it in annotations,
as the 'object' property on the scope is maintained when the first node
of an object body is an inherits clause. The processing of the clause
tidies up the property instead. A few other superfluous properties have
also been removed.

The rules for processing super requests are now more liberal, and they
may now appear outside of the method they are requesting. In all cases
use of super will resolve to the first method defined above the current
inheritance level, or an error if no such method can be found. This is
achieved by storing the existing definitions on the object at the moment
the inherits clause is encountered. A number of tests have been
introduced or changed to test this comprehensively.
Add parameter and generics checks to type match

Running match (and assert) on a type will now also check that the
requisite number of standard and generics parameters are present. This
takes into account variadic arguments and that generic parameters may be
ignored, so all an object needs to do to fulfill a type is guarantee
that it will not raise an error about incorrect argument counts for
either parameter form. The built-in types have been updated to include
this information.

As a result of this change, the String type has been updated to include
both the Pattern and List types, and the implementation has been updated
accordingly. The implementaion of the do() method in the List
constructor has been updated to reflect the actual type of the method.
The Task.each method can now iterate through strings, as well as through
lists or over a number.
Add dialect checking mechanism with AST

Modules which define a method named checked will now be passed the AST
nodes of the modules which use them as a dialect. A checker method may
raise a Checker Failure exception with a node from the AST to indicate a
static error at that point. The AST has been adjusted to be make
processing a checker method a little more sensible.

Some bugs in the JavaScript to Grace method lookup have been identified
and resolved by this change. The lookup will now also pretend that
JavaScript arrays have the built-in List methods.
Correct outer search to include prelude

The definitions on the prelude were not included in the actual scope
object, so the searchScope method could not locate its definitions. This
meant that outer could not reference definitions in the prelude. Now all
the prelude definitions are copied into the scope object when the
interpreter is created.
Rename list to sequence, complete coercer

The list objects stringified to as a 'sequence', and have now been
renamed throughout to use that name instead of list. A sequence class
is now available in the prelude. The type 'Do' has been moved from the
Grace prelude into the runtime, as it is now used internally.

The lookup mechanism on JavaScript objects has been updated to handle
all primitive types, providing methods as though they were the built-in
Grace objects when no such property exists on the primitive value.

This change also tidies up a few misnames in the primitive definitions,
and the built-in Boolean type.
Add Not A Number and simple number parsing

Strings now have an 'asNumber' method which will perform a simple parse
of the string into a number. It will raise the new Not A Number error if
the string is not a valid number. This error now also occurs on division
by zero.