Implement unwind safety
Currently it is UB for Rust code to unwind into FFI (except when using extern "C-unwind", but I don't know if that would be safe to use within libdispatch).
For async functions, this PR simply aborts the process if the closure panics. For synchronous functions, the panic will be automatically resumed once the dispatch call returns.
While I don't believe this should have a major impact on performance, it's possible, and should probably be benchmarked if possible.
Note that this unsoundness is no longer a problem since Rust 1.81, where any panics that would unwind across extern "C" will abort instead: https://blog.rust-lang.org/2024/09/05/Rust-1.81.0.html#abort-on-uncaught-panics-in-extern-c-functions
extern "C-unwind" seems to exist to opt-out of that behaviour, when the caller expects to (safely?) unwind across the FFI boundary.
(which I think should allow panic!()s across an FFI boundary when it was Rust code invoking the FFI function, such as what ash does in the loaders.)