*: only add `yield` calls to the real async functions

Use `thunkify` on the async functions. This allow the function
implementations to be regular node-style async functions or regular
JavaScript sync functions.

Also, now it's possible for the user to pass in their own sync or async
functions into the `sandbox` option. The user just needs to set
`async = true` on any async node-style functions and `thunkify` will take
care of the rest.