code: def _mergeClasses(classDictionaries):
      
      # build a mapping of members to names
      memberTree = {}
      for classDictionaryGroup in classDictionaries:
          for classDictionary in classDictionaryGroup:
              for name, members in classDictionary.items():
                  if members not in memberTree:
                      memberTree[members] = set()
                  memberTree[members].add(name)
      # find members that have more than one name
      classes = {}
      rename = {}
      for members, names in memberTree.items():
          name = names.pop()
          if len(names) > 0:
              for otherName in names:
                  rename[otherName] = name
          classes[name] = members
      return classes, rename
docs: Look for classes that have the exact same list
      of members and flag them for removal.
      This returns left classes, left rename map,
      right classes and right rename map.
      The classes have the standard class structure.
      The rename maps have this structure:
          {
              (1, 1, 3) : (2, 3, 4),
              old name : new name
          }
      Where the key is the class that should be
      preserved and the value is a list of classes
      that should be removed.