Why:
* ContributionsPager is an abstract class that can be extended to
show contributions lists from different sources. For example the
CheckUser extension displays contributions based on lookups in
the CheckUser tables.
* A contribution is modelled as a RevisionRecord object,
corresponding to a row in the `revision` table.
* RevisionRecord objects can also correspond to rows in the
`archive` table, where deleted revisions are stored; however,
ContributionsPager doesn't recognize these.
* By allowing ContributionsPager to handle revisions from the
`archive` table, we allow any subclasses to choose revision or
archive mode.
* Although out of scope here, DeletedContribsPager could later be
replaced with ContributionsPager in `archive` mode, allowing
better feature parity between SpecialContributions and
SpecialDeletedContributions, e.g. T36524, T36523.
What:
* Add isArchive property that subclasses can set, to control
whether revisions are fetched from `revision` or `archive`.
* Add relevant links to each row (history, diff, undelete, etc.)
depending on whether the revisions are existing or archived.
* Only run hooks when in `revision` mode, because handlers assume
certain field names are present.
* Make the selected field names configurable so that a subclass
can override them. Default to the field names used for a
`revision` table lookup. (Note that an extension might want to
specify its own table, so make these completely configurable,
rather than just allowing fields from either the `revision` or
the `archive` table.)
Bug: T366510
Change-Id: Ie48b728d98a74022aa11c2135ee871bfda1f2a9f