Used FSharpx.Core instead of Result<'TSuccess, 'TFailure> – refactored a nested pattern matching

Related to #6, and more specifically to this [comment](https://github.com/GreanTech/Qaiain/issues/6#issuecomment-51312114).

This Pull Request replaces the custom `Result<'TSuccess, 'TFailure>` type with the built-in `Choice<'T1, 'T2>` – the monadic type of the [`choose`](https://github.com/fsprojects/fsharpx/blob/9ad7ff3024b1cc90fd252520272421920c1f4017/src/FSharpx.Core/ComputationExpressions/Monad.fs#L806-809) Computation Expression.

Then it composes the handling of large messages in `handle` function using that Computation Expression, so we can avoid the nested pattern matching.

-----

As [FSharpx.Core](https://www.nuget.org/packages/FSharpx.Core/) has been included in source control, the entire diff is big – essentially there are 2 files to look at: *Program.fs* and *MailTests.fs*.

I think that's how the CLR works when there are static members defined in class. In this case, `Success`, `Failure`, and also `blob` and `queue` are static members.

![image](https://cloud.githubusercontent.com/assets/287532/3924559/b2c809e8-23de-11e4-8e55-2f3672ef8669.png)
To access `Success` and `Failure` the `Program` Type Initializer runs and all the variables (including `blob` and `queue`) are bounded to their values.

So these lines of code inside `blob` and `queue` are also executed:
```f#
let storageAccount =
    CloudConfigurationManager.GetSetting "storageConnectionString"
    |> CloudStorageAccount.Parse
```

The solution is to place `Success` and `Failure` inside their own module:
```diff
diff --git a/Src/Qaiain.CommandLine/Program.fs b/Src/Qaiain.CommandLine/Program.fs
index 2b83dc1..a726a4b 100644
--- a/Src/Qaiain.CommandLine/Program.fs
+++ b/Src/Qaiain.CommandLine/Program.fs
@@ -3,6 +3,11 @@ open System.IO
 open Microsoft.WindowsAzure
 open Microsoft.WindowsAzure.Storage
 
+[<AutoOpen>]
+module Result = 
+    let Success = Choice1Of2
+    let Failure = Choice2Of2
+
 module AzureQ =
     let dequeue (q : Queue.CloudQueue) =
         match q.GetMessage() with
@@ -138,13 +143,13 @@ module Mail =
     let rec handle (getMessage) (deleteMessage) (sendEmail) msg =
         match msg |> parse with
         | EmailMessage.EmailData mail ->
-            mail |> sendEmail |> Choice1Of2
+            mail |> sendEmail |> Success
         | EmailMessage.EmailReference ref ->
             choose {
                 let! message = ref.DataAddress |> getMessage
                 do! message |> handle getMessage deleteMessage sendEmail
                 do! ref.DataAddress |> deleteMessage }
-        | _ -> UnknownMessageType |> Choice2Of2
+        | _ -> UnknownMessageType |> Failure
 
 let queue =
     let storageAccount =
```

Or, as you [wrote](https://github.com/GreanTech/Qaiain/pull/27/files#r16254677), we can put them inside the `Mail` module. But perhaps it makes more sense to put them inside a `Result` module, as in this diff.