chore: Extract some small items from `turborepo-lib` (#11350)
## Summary
Move self-contained types and functionality out of turborepo-lib to
reduce its size and improve modularity. This is part of the ongoing
effort to make turborepo-lib a thin orchestration layer.
## Changes
### Moved to turborepo-engine (~284 lines):
| Type/Module | Lines | Notes |
|-------------|-------|-------|
| `TaskError` | ~30 | Task execution error struct |
| `TaskErrorCause` | ~30 | Error cause enum (Spawn, Exit, Internal) |
| `TaskWarning` | ~50 | Task warning struct for missing env vars |
| `graph_visualizer.rs` | ~174 | Graph rendering (dot, mermaid, html)
with trait-based process spawning |
### Moved to turborepo-types (~50 lines):
| Type | Notes |
|------|-------|
| `APIClientOpts` | API client configuration (url, timeout, token, etc.)
|
| `RepoOpts` | Repository options (turbo.json path, allow flags) |
| `TuiOpts` | TUI options (scrollback_length) |
## Design Decisions
**graph_visualizer.rs**: Used trait-based abstraction
(`ChildSpawner`/`ChildProcess`) to decouple graph visualization from
turborepo-lib's process management. This allows the code to live in
turborepo-engine (where `Engine` is) while still supporting graphviz
binary execution.