[Option] Add OptionalValueField, OptionalEnumField, and list fields (#230812)
OptionalValueField and OptionalEnumField declare a std::optional member,
staying std::nullopt if unspecified.
ListField declares an ArrayRef member replacing a cl::list with
cl::CommaSeparated: each occurrence appends its comma-separated values,
keeping the struct trivially destructible. The elements live alongside
the argument copies, in the BumpPtrAllocator that
cl::LibraryOptions::parse now takes, until the next reset. EnumListField
maps the values to enumerators as EnumField does.
Aided by Opus 5.5