Aggregate all the called mutations.

    :param dict mutation_results: Dict of dicts of the various mutation callers in a per chromosome
           format
    :param dict univ_options: Dict of universal options used by almost all tools
    :returns: fsID for the merged mutations file
    :rtype: toil.fileStore.FileID

def run_mutation_aggregator(job, mutation_results, univ_options):
    """
    Aggregate all the called mutations.

    :param dict mutation_results: Dict of dicts of the various mutation callers in a per chromosome
           format
    :param dict univ_options: Dict of universal options used by almost all tools
    :returns: fsID for the merged mutations file
    :rtype: toil.fileStore.FileID
    """
    # Setup an input data structure for the merge function
    out = {}
    for chrom in mutation_results['mutect'].keys():
        out[chrom] = job.addChildJobFn(merge_perchrom_mutations, chrom, mutation_results,
                                       univ_options).rv()
    merged_snvs = job.addFollowOnJobFn(merge_perchrom_vcfs, out, 'merged', univ_options)
    job.fileStore.logToMaster('Aggregated mutations for %s successfully' % univ_options['patient'])
    return merged_snvs.rv()