Minor refactoring
Following changes:

* Refactored Error to inherit from variant<Success<A>, Fail>
  instead of variant<A, ErrorCode>. This is because A could in
  some cases be ErrorCode which would confuse variant class.
* Adds MailFail continuation which takes another continuation
  as an argument, if that one is errored or canceled, the execution
  wont stop, but and Error is passed to the rest of the computation.
Started work on Async class

It's purpose is to start multiple Cont objects and
only execute it's Rest function when all of the objects
finished.
Changed location of cancelation check in the bind function

The check is now done after the first continuation is executed
and before the second argument to the bind function is executed.
The reasoning is that if it wasnt a composed (using bind) continuation
that was being executed, it also wouldn't have been checked for
cancelation status.
Add one more test to async.cpp