* port page label code from pdfannots
* add tests and clean up
* more cleanup; harden against non-conforming input
* one more test
* update CHANGELOG
* cleanup & respond to review feedback (incomplete)
* Refactor implementation of get_page_labels() into a NumberTree and PageLabels class.
* PageLabels *is* a NumberTree and should always behave like one. This justifies inheriting its data and behavior. And it simplifies the code a bit more.
* fix type errors and cleanup slightly
* fix mypy errors (including tweaking code to avoid problematic dynamic types)
* hoist dict_value from NumberTree (where it may not be a dict) to PageLabels (where it must be)
* avoid repeated warnings by calling _parse() recursively, and checking sortedness only at the end
Co-authored-by: Pieter Marsman <pietermarsman@gmail.com>