Wip sip23 √

@viktorklang, yes it does look familiar. :)

The main difference between our implementations, I'd say, is the mutable data structure that I use in my implementation. (A mutable.Map—which really needs to be thread safe!) The benefit of using the mutable data structure is that anything using the EC can operate directly on the ExecutionLocals without relying on the EC to capture the local values again. In your example, the capture happens again at the end of the EC's execute method.

Using a mutable data structure was my attempt to work around the problem of "capturing thread locals at suspension time" by making the thread locals effectively *always* captured.

As an example, the following code would work in my sketch implementation (assuming the map was thread safe) but I think it would be racy in the code you linked.

```scala
Future {
  ExecutionLocals("a") = 2
  Future {
    ExecutionLocals.get("a")
  }
}
```