Make DescriptorFile obsolete.
This change simplifies the DescriptorReader interface and allows for shorter and more concise application code. The result is that DescriptorReader returns Descriptor instances rather than DescriptorFile instances containing Descriptors and accepts a maximum queue size in Descriptors, DescriptorFile is deprecated, and Descriptor contains a File reference to the descriptor file. Implements #22141. Related to this change, this commit introduces a new UnparseableDescriptor to be returned by DescriptorParser and DescriptorReader if a descriptor cannot be parsed, as opposed to throwing a DescriptorParseException or skipping the entire descriptor file (fixes #22139), respectively. Also related to this change, DescriptorParser now returns an Iterable instead of a List, which prepares parsing large descriptor files descriptor by descriptor (will be tackled in #20395).