This adds support for Wasm SjLj in clang. Also this sets the new
-mllvm -wasm-enable-eh option for Wasm EH.
Note there is a little unfortunate inconsistency there: Wasm EH is
enabled by a clang option -fwasm-exceptions, which sets
-mllvm -wasm-enable-eh in the backend options. It also sets
-exception-model=wasm but this is done in the common code.
Wasm SjLj doesn't have a clang-level option like -fwasm-exceptions.
-fwasm-exceptions was added because each exception model has its
corresponding -f***-exceptions, but I'm not sure if adding a new
option like -fwasm-sjlj or something is a good idea.
So the current plan is Emscripten sets -mllvm -wasm-enable-sjlj if
Wasm SJLj is enabled in its settings.js, as it does for Emscripten
EH/SjLj (it sets -mllvm -enable-emscripten-cxx-exceptions for
Emscripten EH and -mllvm -enable-emscripten-sjlj for Emscripten SjLj).
And setting this enables the exception handling feature, and also sets
-exception-model=wasm, but this time this is not done in the common
code so we do it ourselves. It also sets the multivalue feature, because
for longjmp we throw two values and catch two values: the setjmp
buffer and the return value. So catch instruction will produce two
values.
Also note that other exception models have 1-to-1 correspondance with
their -f***-exceptions flag and their -exception-model=*** flag, but
because we use -exception-model=wasm also for Wasm SjLj while
-fwasm-exceptions still means Wasm EH, there is also a little
inconsistency there, but I think it is manageable.
Also this adds various error checking and tests.