Add varargs and tidy primitive definitions

Methods can now have variadic arguments, which allow setting a minimum
on the number of arguments that they take rather than an exact number.
The runtime has been updated to include simple lists and the list
pattern definition has been fixed.

Other small bugs exposed in the runtime have been patched, including the
fallback of the toString method on Grace objects. Specific boolean
constructors and inheriting match results have been added to the
primitives, but the external runtime API for their creation is
unchanged.
Add match method to blocks

Single parameter blocks are now patterns, with a match method that
defers to that parameter's pattern, allowing a test to see if an
application of that block will work for a certain argument. Blocks which
have no or many parameters raise an exception if you try to match
against them.
Add exception and packet primitives

The exception and exception packet primitives have been added as
constructors to the primitive definitions, and the internal definitions
have been updated to use them. The parser, interpreter and runtime
machinery still throw strings, but these are now reported as internal
errors. They should be updated to use the new exceptions in the future.

The packets do not yet build up a stack trace, and native errors are not
wrapped, both of which should also be patched. The InternalError
exception will catch native errors though.
Finish interpreter exceptions, simplify variables

The exceptions are now in their own module, and have been fleshed out to
cover all of the interpreter and runtime exceptions (but not those from
the lexer or parser, which will be updated in the future). All of these
exceptions are in every interpreter's scope so they can be requested by
name. The test harness and run script have been updated to differentiate
between Grace exceptions and internal errors. Catching packets and stack
traces are next.

As part of this change, the way variables (and type definitions) are
defined has been updated to use methods from the runtime. Hoisting
creates methods that throw an Undefined Value exception until the value
is set (or Uninstantiated Type for types). A test for the Invalid
Inherits exception has also been added.