This is the heart of the change: checkpoint can skip pages that are clean, or are leaf pages that have been written since the checkpoint started, if no updates were skipped that could cause checkpoint to write a different page image.

If a page was clean when the checkpoint started, and was dirtied since, it will also have `checkpoint_gen` of the current checkpoint, but checkpoint will currently still try to write it (because we don't do anything to `rec_min_skipped_txn` when the page becomes dirty.  I'll try to fix that...