Provides strong-typed persistence of data in Thread local storage, which can also be transient and automatically removed on dispose.
Usage: Thread.CurrentThread.SetData<Foo>(foo);
var saved = Thread.CurrentThread.GetData<Foo>();