Wip sip23 √

@richdougherty exactly right.

Just to reduce the possibility of confusion, let me desugar your example:

```
def myAsyncFunc(f: Int => Int)(implicit ec: ExecutionContext): Future[Int] =
  Future(factorial(12)) map { a =>   // #1
    a/2
  } map { b =>   // #2
    f(b)
  }
}
```

context is saved lexically: in this case, both closures (1, 2) have been created in the scope of the call to `myAsyncFunc` -- so this is where context is saved.

[Twitter's Promise implementation](https://github.com/twitter/util/blob/master/util-core/src/main/scala/com/twitter/util/Promise.scala#L154) does exactly this: context is saved every time computation is suspended. (i.e. alongside every closure in every `flatMap`)