Make tasks completely asynchronous by default

Allowing task continuations to run synchronously produced a memory leak
that blew the stack out easily in recursive method definitions. Now
calls to 'then' on a task follow the Promises specification by dropping
the call stack before continuing. However, this behaviour can be
overridden by the 'now' function, present on every task, which forces
each subsequent task to run immediately as well. Trying to force a task
in this way fails if the task has truly asynchronous behaviour.

A number of definitions in the runtime have been updated to adjust to
this new interface. Method application still uses setImmediate, but
rather than creating a custom 'now' as it did before, it binds into the
new 'now' interface by setting the memoised function to be run on force.