Async Functions: Fix implicit return as well as rethrowing

The async function should complete with undefined if there is no
return. It should also lead to a rejected promise if there is an
uncaught exception.

Fixes #933