Support for Execution monad

Yeah :smile: 

withExpectations and withFacts are defined on Verifiable, which expects an implementation of run that returns a `Option[String \/ Throwable]`, where success is a None.

Execution can return an arbitrary value `T` when run. So `Verifiable` does not give you a way to test it. Its implementation also doesn't allow you to define multiple tests. You get one call to either runsOk, withFacts or withExceptations.