code: public AnalysisResults<SolutionType> merge(AnalysisResults<SolutionType> otherResults){
          otherResults.results.keySet().forEach(problemID -> {
              otherResults.results.get(problemID).keySet().forEach(searchID -> {
                  List<SearchRunResults<SolutionType>> runs = otherResults.results.get(problemID).get(searchID);
                  runs.forEach(run -> {
                      // deep copy run
                      SearchRunResults<SolutionType> runCopy = new SearchRunResults<>(run);
                      // register in this results object
                      registerSearchRun(problemID, searchID, runCopy);
                  });
              });
          });
          return this;
      }
docs: Merge the given results into this results object. A copy of the newly added search
  runs is made.
  
  @param otherResults other results to be merged into this results object
  @return a reference to the updated results object