Improved the Future implementation so it doesn't need to be disposed.

This should greatly enhance usability. Basically, the idea is to not have a ManualResetEvent all the time during the Future's lifetime. The ManualResetEvent is only created when someone actually wants to wait on it, and after the waiting is over, it is automatically disposed without the user ever actually seeing it.

Also, the callback interface has changed to be more lightweight. A state object can now be passed to the RegisterCallback function, which eliminates the need for additional closure allocations when registering callbacks.

The AutoWaitManager has emerged to help hide the need for IDisposable. It could be useful for other applications and is therefore not a nested class.