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?