Support added for exceptions with ASYNCIFY

The general scheme is not very complicated. Changes:

1. Rather than doing `dynCall_vi` on the *foo*__asnc_cb function, we use `invoke_vi`. This is essential if the callback functions are to throw exceptions.
1. If a callback did throw an exception, then we should reenter the parent callback function only if it checks for exceptions at the resume point. Otherwise, the exception should propagate up. We check for this using an extra boolean in the async context: `emscripten_alloc_async_context` now has an extra argument which the C++ code uses to indicate whether the async function is called with "invoke" or "call". (So the `invoke` argument to `emscripten_alloc_async_context` is set when `__THREW__` is checked immediately after the async call. We also update the invoke flag in `emscripten_realloc_context`.)
1. If the exception isn't caught anywhere, we rethrow it finally so that an error message is provided (admittedly not a very clear one, but it's no worse than when an exception is throw out of a synchronous `main`).

This pull request works in conjunction with the pull request to the fastcomp compiler.
Fair enough! I didn't realise LLVM had a dedicated instruction for __builtin_alloca to use. Either way -- I ran the snippet of test code above before committing the change; the assertion *does* fire when a callback places something on the stack above the async_ctx, then tries to expand the async_ctx.

Maybe we should just make the async_ctx structures on the heap in the first place? Or if that hurts performance, we could move them to the heap in the uncommon case that realloc_async_context needs to expand it but can't.