Use asynchronous asString in interactive mode

The toString method on Grace objects will defer to the default asString
if the method is asynchronous. Now the interactive mode will always use
asString and simply wait for it to complete if the value is a Grace
object, otherwise it will defer to the object's toString.
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.