This spreads out transitively to many places and requires that
we use `check_call!` instead of `check_one_call` in a number of
places.
(cherry picked from commit 6bc31dcf206518a7be7f0ac6e773d5dfe25531ea)
The mutation-based methods had some pitfalls, and we don't really
need them.
We could re-add them if we need to.
(cherry picked from commit ca92b8491d87cebf54dd2468599168fc7a16c07f)
This loses the custom name for "thunk", but checking thunkness is
a niche use case that I don't think we should spend much code on.
(cherry picked from commit 7bdff525c13234ce6a32ea9346292d948b0840c1)