Wip sip23 √

Right, but this is exactly my point: it's too easy to mess up; not by implementors, but by users. (e.g. confusing a `def` with a `val` completely changes semantics)

Ours is baked into our Promise impl: https://github.com/twitter/util/blob/master/util-core/src/main/scala/com/twitter/util/Promise.scala#L162  (We don't yet use ExecutionContexts)

One way to ensure that you `prepare()` is to separate the types:

```
traitExecutionContext {
  def prepare(): Executor
}

trait Executor {
  def execute(r: Runnable)
}
```