Make 'await' resolve as in the C# 5.0 language specification.

This means that the awaiter type must implement INotifyCompletion and can optionally implement ICriticalNotifyCompletion. Additionally, it will not attempt to use optional parameters in a GetAwaiter() call, and it will verify that an IsCompleted property is readable.