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.