chore: Extract `turborepo-engine` crate from `turborepo-lib` (#11315)
## Description
Extract core Engine types into new `turborepo-engine` crate.
**Moved to turborepo-engine:**
- `Engine<S, T>` struct (generic over task definition)
- `TaskNode`, `Building`, `Built`, `Error`
- `execute.rs` - task execution logic
- `dot.rs`, `mermaid.rs` - graph visualization
**Kept in turborepo-lib:**
- `builder.rs` - coupled to TurboJsonLoader
- `task_inheritance.rs` - coupled to TurboJsonLoader
- `ValidateError`, `validate()` - uses UIMode
**Key design:**
- `TaskDefinitionInfo` trait abstracts task definition fields engine
needs
- Type alias `Engine<S> = turborepo_engine::Engine<S, TaskDefinition>`
for backward compat
- `EngineExt` trait for lib-specific methods
## Testing instructions
CI should pass, of course. I've also hand-tested this and I don't see
anything strange happening.