Run sync/async functions and return a typed Result instead of throwing.
stable, `no_std`-compatible, fallible heap allocation