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.
I am not sure it's easy to come up with a descriptive and meaningful name for this Discriminated Union.

* Messages
* ResultMessages
* Results
* Outcomes

-----

Thinking out loud, we could use the existing `Unknown` case of the `EmailMessage` Discrinimated Union:

```diff
diff --git a/Src/Qaiain.CommandLine/Program.fs b/Src/Qaiain.CommandLine/Program.fs
index 58e4399..ec70cc6 100644
--- a/Src/Qaiain.CommandLine/Program.fs
+++ b/Src/Qaiain.CommandLine/Program.fs
@@ -144,7 +144,7 @@ module Mail =
                 message |> handle getMessage deleteMessage sendEmail |> ignore
                 ref.DataAddress |> deleteMessage |> Success
             | None -> () |> Success
-        | _ -> "Unknown message type." |> Failure
+        | EmailMessage.Unknown -> EmailMessage.Unknown |> Failure
```

In the above diff, the `handle` function's return type is:
```
-> Result<unit, EmailMessage>
```