code: def multi_groupby(self, key_fn):
          
          result_dict = defaultdict(list)
  
          for x in self:
              for key in key_fn(x):
                  result_dict[key].append(x)
  
          # convert result lists into same Collection type as this one
          return {
              k: self.clone_with_new_elements(elements)
              for (k, elements)
              in result_dict.items()
          }
docs: Like a groupby but expect the key_fn to return multiple keys for
          each element.