Task<T> should never return null

In the world of async/await, returning a default value is never done via returning `null`, it is done by returning a `Task<T>` whose Result is `null`. 

Having a default value for `Task<T>` be `null` makes mocking async methods unnecessarily complicated, because the result is guaranteed to be bad (i.e. you *must* mock every async method called, because awaiting `null` will only lead to tears).

Instead, this PR mocks `Task` and `Task<T>` by returning an already-completed `TaskCompletionSource`, having the same effect as returning the default value, only awaited.