A more precise return type for the handle function

Although the `handle` function in the `Mail` module returns `Unit` it can also throw exception in the case of an unknown message type.

We should change the return type from `Unit` to something that includes the case of failure, something like:
* [Try](http://www.scala-lang.org/files/archive/nightly/docs/library/index.html#scala.util.Try) in Scala
* [Either](https://hackage.haskell.org/package/base-4.7.0.1/docs/Data-Either.html) in Haskell
* [Choice](http://msdn.microsoft.com/en-us/library/ee353439.aspx) in F# - although in my opinion it's extremely undescriptive

This Pull Request changes the `handle` function in the `Mail` module to return:
```
Either<unit, InvalidOperationException>
```

If we take this direction, we can probably use the introduced `Either` type as the monadic value in #6.
Essentially, what we gain is a more precise type-signature for the `handle` function.

The `handle` function either returns Unit or throws an Exception – but currently its return type is Unit and so it doesn't describes the side effect (Exception).

This can be reworded to Postel's Law (*".. be conservative in what you send .."*) since `Result<unit, InvalidOperationException>` is a stronger return type in that it makes more guarantees than Unit.

You may see also a small part (16:00-16:37) from [Duality and the End of Reactive](http://channel9.msdn.com/Events/Lang-NEXT/Lang-NEXT-2014/Keynote-Duality) by Erik Meijer, where Scala's Try type is being used, I think, similarly.