Renamed IsCached to IsLoaded
Separated Work.Context to WorkContext

Work.Context renamed to WorkContext, no longer nested in Work.
Moved WorkContext to a new file
Work.Id is now a DEBUG or FAT feature
Added wait to promises
IExpected new interface

ICacheNeedle = INeedle<T> + IExpected

IExpected represents something that will be ready in the future.

Note: I'll rename IsLoaded to IsReady (yes, it was IsCached just a
minute ago).
Renamed IsLoaded to IsReady

This will come back to bite the class Work
Missing rename form IsLoaded to IsReady
A Work is now an IPromise

Currently using PromiseNeedle internally, I'm not sure if I must keep it
that way.
IExpected expanded

IExpected is now: IsCanceled, IsCompleted (previously IsReady) and
IsFaulted

LazyNeedle and CacheNeedle are never Canceled nor Faulted
PromiseNeedle is never Canceled but can be Faulted
Work should be able to be Canceled and Faulted (which means I have to
change it's implementation to support cancel).

All in the good name of implementing Task