Improved version tracking for transactions
More robust GCMonitor
Marked some exception found on testing
GCMonitor refactoring
Fix for RetrieveWaitHandle (thread visibility)
Marked another exception found during testing
Refactored Recycle (testing)

The refacoting is done in order to mitigate found
NullRefeferenceExceptions, rationale behind this is those exceptions are
caused by premature recycling.
Added reference to the runner thread
Removed explicit recycling

We are going to trust the GC - solving the NullReferenceException from
the root.
Minor clean up
LockNeedle<T> and LockNeedleSlot<T> made sealed
Sealed WeakNeedle.GetHashCode - code analysis fix
Sealed WeakNeedle.Equals - warning fix
Fix for batch build
monitor thread no longer goes in background

I'm facing a bug in .NET that span from .NET 2.0 to .NET 4.5 - it has to
do with threading and garbage collection. So far it seems to be the
problem arrises when calling Set on a AutoResetEvent from the finalizer
thread (line 166 after this commit).
Changed to ManualResetEvent (testing)

The idea is that having the garbage collector reset the wait handle is
causing the problem.
Now waiting on Work uses ManualResetEventSlim
GMonitor will run using Work (testing)

Apparently I cannot use ManualResetEvent either, using work will avoid
using a WaitHandle from the finalizer thread.
Fix: if you add a work, start it.

TODO: Can I prevent adding another work when the previous has not
finished?
Changed state machine

The new implementation will not allow simultaneous execution of the
Collect event.