Backport the less controversial helpers from the OptionT branch.

This splits out the things that I suspect we want regardless of the fate of #53, and if merged first, could make the diff on #53 a bit more illuminating.
I think it's correct, but we now call `transReq` twice, which I didn't notice until now.