TitleParser can parse and validate user input and turn it into a LinkTarget. We need a similar mechanism for creating known valid instances of PageReference and PageIdentity from user input.
Perhaps we also need a mechanism for creating PageReference and PageIdentity instances from semi-trusted input such as the database or imports, similar to TitleValue::tryNew.
Alternative to explore: allow invalid PageReferences and PageIdentites and PageRecord, but require a ValidatedPageReference when writing to the DB. Validation occurs when converting from on to the other. But do we really want to introduce the extra types? Shall we add an isValidated() flag? That grows the constructor...