runCatchingCancellable
Like runCatching, but rethrows CancellationException so structured concurrency is preserved.
Prefer this over runCatching for any block that may run in a cancellable coroutine context (including non-suspend helpers called from suspend code).
Non-CancellationException failures (including Error) become Result.failure, matching suspendRunCatchingCancellable.
For suspend blocks, use suspendRunCatchingCancellable (separate name avoids overload ambiguity).