- Reverted from generic Package approach to factory function pattern
- Factory creates Engine::new_raw() + registers package (efficient)
- AsyncRunner and SyncRunner use engine_factory: Arc<dyn Fn() -> Engine>
- Each job gets a fresh engine instance (cheap with factory pattern)
- Package is created once inside factory, engines reuse it