FlatMap on Futures

Works similarly to Scala's flatMap. 
`flatMap(f: T -> Future<U>) -> Future<U>`

We don't need the error parameter because if you want this map to fail you fail the future you return.


Depends on #1 #2 and #3