Added FinalizingForUnload proeprty to GCMonitor

FinalizingForUnload is a wrapper for
AppDomain.CurrentDomain.IsFinalizingForUnload();

This may allow to adjust the implementation for platforms where
AppDomain.CurrentDomain is not available (*cough* Android *cough*), I
cannot target any such platform, though.
Work and WorkContext use GC.FinalizingForUnload

Also implemented some suggestions from code review.
Implemented some suggestions from code review
All calls to AppDomain are now in GCMonitor
Fixes from code review
Fixed Batch build

Since GCMonitor is now the only type that provide access to AppDomain,
it is needed in all builds. This means that GCMonitor and all the types
that it needs to work cannot belong only to FAT builds.
Style fixes

Nothing to see here, move along...

Ok... look! I care about naming conventions and code order and stuff.
Because I believe that being strict on my output is a good thing. But
being strict on my code means that when I find some code style issue I
have to decide between a poor commit massage ("Style fix") and a poor
code. I prefer the poor commit massage.
Dequeue is spelled Dequeue
Code review

"Look: that class should be static" and "You could make this field
readonly" that kind of stuff.
More code review (actual bug fixes)
PromiseNeedle Put on piar

Improved PromiseNeedle to better match PromiseNeedle<T> behavior.
More code review (no bug fixes here)
Fixed ArgumentException arguments order
More code review and clean up
Final Clean Up

Hopefully I will not clean this code again until I have to add something