Yield tasks every 10ms instead of every apply

In order to avoid potential stalls when processing large chunks of code
with no method requests, yielding to the event loop now occurs directly
inside of the task mechanism once 10ms has passed since the last yield.
This should produce more consistent yielding, though it's not yet clear
what the performance penalities are for constantly checking the time.

The Task API is now exported by the main hopper module.
Make portions of the parser asynchronous

The larger parts of the parser are now asynchronous, using the Task API.
This means that the parser will also be non-blocking. It should also
ease a transition to a token stream rather than manually splitting
tokens synchronously. The token operations remain synchronous for now.

The callback method on tasks can now handle undefined and null values,
and the prelude will report its module name if an error occurs.