Monadic goodness

Added a monad instance, and a `dofuture` macro to make use of `map` and `flatmap` (the two most used combinators) more pleasant, so that instead of writing...

```clojure
(f/flatmap (some-gateway-call "arg1" :arg2) [res1]
  (f/flatmap (a-dependent-call res1) [res2]
    (f/value (op res1 res2))))
```

we can write...

```clojure
(dofuture [res1 (some-gateway-call "arg1" :arg2)
            res2 (a-dependent-call res1)]
  (op res1 res2))
```