Implement require.

Reimplemented the require mechanism. Require assigns the exported module
to a context variable. If the module exports a function, require will
invoke that function with the context as a first argument and a callback
to accept the error or value as the second argument.

The `evaluate` function has been reimplemented so that it will also
invoke a function return value as a callback. Once again, we are
asynchronous.