Adding parameter flatoutdir, because this is used for PAT. Review comments/questions for @lefticus:

1. In flatoutdir mode, the RunManager test produces:

0-UserScript/
    1/
        in.osm
    2/
        in.osm
    mergedjob-1/
        in.rb
        user_script.rb
        params.json
        result.ossr
        *test files*
    mergedjob-2/
        in.rb
        user_script.rb
        params.json
        result.ossr
        *test files*
    out.osm
    params.json
    result.ossr
    stdout

Could this be instead something like:

0-UserScript/
    mergedjob-1/
        in.osm
        in.rb
        user_script.rb
        params.json
        result.ossr
        out.osm
        *test files*
    mergedjob-2/
        in.osm
        in.rb
        user_script.rb
        params.json
        result.ossr
        out.osm
        *test files*
    mergedjob-3/
        in.osm
        in.rb
        user_script.rb
        params.json
        result.ossr
        out.osm
        *test files*
    stdout
    stderr

2. I see in the RunManager test that all of the result.ossr files are locatable in the RunManager tree. However, I need to be able to match them up with their original jobs. I understand that optimizeJobTree basically collapses those three jobs into one. Would it be possible to have a "rexpandJobTree" that broke those jobs out again, so that each one has its own JobErrors class that has parsed its respective result.ossr file (and perhaps they all point to the same stdout and stderr files)? Even nicer from my point of view would be if those jobs never disappeared in the first place, but were only merged virtually ... On the other end of options, at the very least, at the end of the process, I could work with just having a separate JobErrors object for each original job.