refactor(job): linearize output/action/compressor resolution in get_job
Replace the tangled pair of nested matches with three explicit branches
keyed on how the output is determined:
1. Explicit output path (-o or trailing io_list item)
2. Stdout pipe
3. No output — invent a filename from the resolved compressor+action
Extract finalize_with_output, finalize_without_output, and
fill_missing_from_io as focused helpers. Each is ~linear; the previous
interleaving of output construction with as-side-effect action/compressor
updates is gone.
Behavior preserved; tests stay green.