NoTrackingThreadLocal Improvements

NoTrackingThreadLocal is now a Promise<T> meaning that:
- NoTrackingThreadLocal is now a Needle.
- NoTrackingThreadLocal has a Free method to "uncreate" the Value of the
current Thread.
Also NoTrackingThreadLocal now allocates memory upfront removing a
previous race condition.
NoTrackingThreadLocal<T> is now IPromised<T>
Put on pair

TrackingThreadLocal<T> is now a IPromise<T> and IPromised<T>, so:
- TrackingThreadLocal<T> is a Needle<T>
- TrackingThreadLocal<T> allows to Free the Value of the current Thread
Fixed Interface Implementations

Somehow I forgot that an IPromised<T> is also an IObserver<T> and a
IReadOnlyNeedle<T>
Added HasThreadUniqueId
Added ThreadEqualityComparer

ThreadEqualityComparer uses ThreadingHelper.ThreadUniqueId as Hash
function. The advantage of ThreadUniqueId over Thread.ManagedId is that
Thread.ManagedId may get recycled. The purpose of ThreadEqualityComparer
is to ease using Threads as keys for hash structures.
ThreadEqualityComparer as default comparer

EqualityComparerHelper will use ThreadEqualityComparer as default
comparer for threads. In other words
EqualityComparerHelper<Thread>.Default is now equivalent to
ThreadEqualityComparer.Default.
Added LockRecursionException
Added SpinLock backport