Monad error

This is obviously based on [`Control.Monad.Except`](http://hackage.haskell.org/package/mtl-2.2.1/docs/Control-Monad-Except.html). Changed the names of the operations as methods with `throw`/`catch` in their name are probably misleading in the context of Scala.