Wip sip23 √

Hey guys, sorry for the lateness here -- I've been traveling the last few days. 

@richdougherty `prepare` came out of a call between myself and Heather, Phillip (and maybe Viktor? I forget.) The motivation for it was to support exactly this use case -- to save context.

@viktorklang I completely agree that `prepare` is not sufficiently documented or motivated. I'm not arguing with the need to change it, all I am saying is that everything I've seen so far doesn't solve the problem at hand. (Again, unless I am missing something.)

@richdougherty Unfortunately, a thread-local alone isn't sufficient. Implementations would have to save/restore. This is what we do in Twitter's [Promise impl](https://github.com/twitter/util/blob/master/util-core/src/main/scala/com/twitter/util/Promise.scala#L100).