Wip sip23 √

@richdougherty Thanks for the background. See my last reply to @viktorklang. I'm not sure it's a good idea to push this out of ECs for this reason.

Another way to go about this may be to disentangle propagation/prepare from ECs and instead define a single, well-known `ThreadLocal` whose value is always suspended/restored, then hang everything off of that, but I don't think that we can get away from the responsibility of implementations to save context in one form or another.