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.