fix: report errors the way ArgumentParser does, not as a bare help screen
`report(error:)` now mirrors `exit(withError:)` minus the exiting, through
`fullMessage(for:)`/`exitCode(for:)`. A parse error keeps the text naming the
offending value and listing the accepted ones, which the help screen alone
dropped; failures go to standard error, clean exits to standard output, and a
bare `ExitCode` prints nothing. Both `evaluateAsRoot` overloads route through it,
so `CommandREPLRunner` is fixed with it.