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.
Does it make sense to provide an additional method to stack two services together? e.g `service1 or service2 or service3`