Add assume_fatal_throw optimizer option (#46856)
This option frees the optimizer from having to prove nothrow in order
to move certain side effects across call sites. It is currently enabled
in finalizer inlining, but there may be opportunities to use it elsewhere
in the future, as well as potentially plumbing it down to LLVM. The
intended use case is not in the main compilation pipeline, but rather
for alternative compilation modes where thrown errors are fatal and
the state of the heap can not be observed after a thrown error.