code: static Tag internCustom(Tag t) {
      return (t instanceof BasicTag) ? t : newTag(t.getKey(), t.getValue());
    }
docs: Interns custom tag types, assumes that basic tags are already interned. This is used to
  ensure that we have a common view of tags internally. In particular, different subclasses of
  Tag may not be equal even if they have the same key and value. Tag lists should use this to
  ensure the equality will work as expected.