code: public TypeMetadata without(Entry.Kind kind) {
          if (this == EMPTY || contents.get(kind) == null)
              return this;
  
          TypeMetadata out = new TypeMetadata(this);
          out.contents.remove(kind);
          return out.contents.isEmpty() ? EMPTY : out;
      }
docs: Return a TypeMetadata with the metadata entry for {@code kind} removed.
  
  This may be the same instance or a new TypeMetadata.
  
  @param kind the {@code Kind} to remove metadata for
  @return a new TypeMetadata without {@code Kind kind}