Having the blockTimestamp available in the state machine doc simplifies startup recovery, since it allows a node to simply scan all its donor state machine docs on startup to find out which databases it should block for and as of what timestamp.
To actually put the blockTimestamp into the state machine doc when updating the state machine to "blocking", the donor must know the blockTimestamp ahead of time.
To do this, the donor can reserve an OpTime for the write ahead of time using the OplogSlotReserver.
This will probably require moving the OplogSlotReserver out of TransactionParticipant into its own file.
The code review should have sign-off from Judah Schvimer.