Closes #12.
Loads --config <file> before execution, applies configuration as defaults, and reparses explicit CLI flags so the CLI wins. Configuration is now strict JSON: unknown/duplicate keys, wrong types, unsupported extensions, and invalid reporter/job/port/timeout/debounce values fail clearly. Parsed strings remain owned for the loader lifetime.
The advertised formats are aligned with reality in help and documentation: JSON is supported; TOML and YAML are explicitly not yet supported.
End-to-end build checks invoke the real CLI to prove config-driven discovery, CLI-over-config filter precedence, and invalid-config exit behavior.
This PR is stacked on #18 so its diff stays scoped to issue #12. Merge #18 first, then retarget this PR to main.
Verification:
zig fmt --check .zig buildzig build testzig build exampleszig build -Dtarget=x86_64-linux-gnu