Add methods for loading and saving a history file.
The history file implementation in `DescriptorReader` writes the history file passed in `setExcludeFiles()` immediately after reading and parsing the last descriptor and putting it into the queue, regardless of whether the application has finished processing those descriptors. If the application fails after the history file is written, it may not be able to process descriptors in the next execution that have still been in the queue at the time of failing. This commit deprecates the `setExcludeFiles()` method and replaces it by a `setHistoryFile()` and a `saveHistoryFile()` method. Applications would use `setHistoryFile()` before starting to read descriptors, process all descriptors, perform any cleaning up, and then call `saveHistoryFile()`. Implements #20521.