code: public TypeMetadata combine(Entry elem) {
          Assert.checkNonNull(elem);
  
          TypeMetadata out = new TypeMetadata(this);
          Entry.Kind key = elem.kind();
          if (contents.containsKey(key)) {
              out.add(key, this.contents.get(key).combine(elem));
          } else {
              out.add(key, elem);
          }
          return out;
      }
docs: Return a copy of this TypeMetadata with the metadata entry for {@code elem.kind()} combined
  with {@code elem}.
  
  @param elem the new value
  @return a new TypeMetadata updated with {@code Entry elem}