chore: Move `TurboJsonLoader` to `turborepo-turbo-json` crate (#11365)
## Summary
Extracts `TurboJsonLoader` from `turborepo-lib` to
`turborepo-turbo-json`, using trait abstractions to break the tight
coupling with `MicrofrontendsConfigs`.
## Changes
### `turborepo-turbo-json`
- Add `TurboJsonUpdater` trait for extensible TurboJson enrichment after
loading
- Add `LoaderError` enum for loader-specific errors
- Move `TurboJsonLoader<U>` generic struct with all loading strategies
(SinglePackage, Workspace, WorkspaceNoTurboJson, TaskAccess, Noop)
- Add `TASK_ACCESS_CONFIG_PATH` constant
- Add `NoOpUpdater` as default no-op implementation
- Add `turborepo-fixed-map` dependency
### `turborepo-lib`
- Implement `TurboJsonUpdater` for `MicrofrontendsConfigs`
- Add `UnifiedTurboJsonLoader` enum wrapper to handle both MFE and
non-MFE cases
- Update imports throughout (builder.rs, mod.rs, devtools.rs,
package_changes_watcher.rs)
### `turborepo-config`
- Add `From<LoaderError>` impl for `Error` to enable seamless error
conversion
## Testing
- All existing tests pass
- `cargo check` and `cargo clippy` pass with no warnings