Closes #15.
Replaces one-thread-per-test execution with a bounded scheduler. n_jobs is now an exact concurrency ceiling; omitting it uses the logical CPU count with a one-worker fallback. Suites and nested suites run in declaration order, direct tests run concurrently, and inherited per-test hooks execute on the same worker as their test.
Reporter calls are serialized and results are emitted in declaration order. Nested totals, failure propagation, filters, skips, only-selection, and lifecycle hooks are all handled by the parallel path, while duplicate runner/reporter start/end events are removed.
Tests verify one-worker, two-worker, and CPU-default limits; deterministic event order and totals; pass/fail/skip propagation; and nested hook lifecycle behavior. The thread-safety and hook semantics are documented.
This PR is stacked on #20 so its diff stays scoped to issue #15. Merge #20 first, then retarget this PR to main.
Verification:
zig build testrepeated three timeszig fmt --check .zig buildzig build exampleszig build -Dtarget=x86_64-linux-gnu