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.
Is this going to have the same behavior? It seems that before this commit the ```Request``` is translated before ```isDefinedAt``` while the PR would check ```isDefinedAt``` before translating the ```Request```.