Task
Build a small `pick_concurrency(work_type)` that returns one of `"thread"`, `"process"`, or `"asyncio"`:
- `"io_bound"` β `"asyncio"` (modern Python's default for I/O)
- `"cpu_bound"` β `"process"` (GIL means threads can't parallelise pure-Python compute)
- `"network_io"` β `"asyncio"` (same family as io_bound β high concurrency at low overhead)
- `"file_io_legacy"` β `"thread"` (sync stdlib like `open()` doesn't release the GIL the way socket I/O does; ThreadPool is the pragmatic fix)
- anything else β `"thread"` (safe default: doesn't require event-loop discipline)