Replace `MGuard` with `MFail`
This MR implements MFail as described in #171. This replaces mguard with guard : P → {Decision P} → M P using mfail. As such I've replaced guard P; mx with _ ← guard P; mx in all lemmas. This MR further more replaces case_option_guard with a more general case_guard.
These changes are very much breaking changes.