Add multiple isolated execution environments
This commit adds support for multiple isolated OCaml execution environments,
each with its own type environment and failed cell tracking.
Key changes:
- New Environment module (lib/environment.ml) provides:
- Isolated execution contexts using Toploop.toplevel_env
- Per-environment state (is_setup, failed_cells)
- Create/destroy/list operations
- with_env for safe context switching
- Updated API to include env_id parameter on all environment-scoped operations
- Changed env_id from string option to string (empty = default) for cmdliner compatibility
- Updated all clients, workers, tests, and examples
Environment IDs are strings. Empty string maps to "default" environment.
All existing single-environment usage continues to work unchanged.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>