Draft: main-refactor-Identifier
This is a tentative refactor of the Identifier/Range class, pulling out the Range::field in-class class to a separate class, IdentifierField. Relying on unit tests (recently introduced) to reproduce the exact behaviour of the existing Range::field, and maintaining a typedef to IdentifierField in Range so that client code doesn't change (but does require recompilation). The various methods have (mostly) been updated to C++20.