code: boolean mark(ProtoType type) {
      if (type == null) throw new NullPointerException("type == null");
      if (identifierSet.excludes(type)) return false;
      return types.add(type);
    }
docs: Marks a type as transitively reachable by the includes set. Returns true if the mark is new,
  the type will be retained, and its own dependencies should be traversed.