Simplify async throw state

We used to generate a fall through state that all it did was rethrow the exception. Instead of doing that we now go directly to handle the exception in the runtime function. This allows us to skip the errback state and can always use the same errback function.

Also, make sure that we wrap the await expression in Promise.cast so that we can do:

```js
async function f() {
  console.log(await 1);
}
```

Fixes #911
Fixes #884