This is an alternative to
MFail in #488. It allows a monad to present a general error raising mechanism. This includes an example instantiation for option. I didn't do the work of #488 to completely replace
MGuard, but if we decide to use this instead of
MFail, we can merge the two patches.