perf: Defer SCM task await to overlap with setup work (#12177)
## Summary
Defers the `scm_task_await` synchronization point in
`RunBuilder::build()` to run after SCM-independent setup work, reducing
Time to First Task by letting API client resolution, cache init,
turbo.json loading, package graph validation, env var inference, and
turbo.json preloading overlap with the background git index
construction.
A customer's `--profile` trace showed 46ms blocked at `scm_task_await`
while eight downstream operations that don't need SCM waited
unnecessarily. This change reorders those operations to run before the
await.
The `turbo_json_loader_setup` check was changed from
`task_access.is_enabled()` (which requires constructing `TaskAccess`
with `&scm`) to `TaskAccess::check_enabled(&self.repo_root)` — an
existing static method that performs the same filesystem check without
SCM.
## Changes
- **`crates/turborepo-lib/src/run/builder.rs`** — Moved `scm_task_await`
from immediately after `pkg_dep_graph_build` to just before
`task_access_setup` (the first step that actually needs `&scm`). All
SCM-independent work now runs while the background git index build
continues.