Wip sip23 √

I'm not saying your proposal wouldn't work. I'm saying it's easy, for a user, to mess it up. The minutiae of how ECs are threaded through now affect your semantics. If I design an EC which *always* has to be prepared at the suspension site, a user can accidentally mess this up completely. Imagine the following completely feasible example:

```
package object myproject {
  implicit val ec: ExecutionContext = System.getProperty("ec") match {
    case "twitter" => TwitterEC
    case _ => DefaultEC
  }
}
```

this is the wrong thing entirely; the EC's type does not bear witness to these semantics, and it's very easy to mess up. Whereas `prepare` puts this burden on the implementor (though I argue that, by changing the types as above, you can make this difficult to mess up), because the type of EC is precise about where capture happens -- it is well defined, and impossible for a user to mess up unknowingly.