Add MonadZero and MonadPlus

I don't know if we want to lay down a consistent set of laws for MonadPlus, but left distribution seems to make sense to me over left catch, given that an `Alternative` instance can be used for left catch instead (I think?).

`MonadZero` as a separate class seems useful too, as we don't have `fail` in our `Monad`, and also it matches how we do things with `ArrowZero` and `ArrowPlus`.