Make events do The Right Thing automatically when awaited

Consider the following (incorrect) code:

    await myWindow.Events().KeyUpObservable;

This code deadlocks because we're awaiting an Event which will never complete.
This PR overrides the awaiter, so that if *and only if* you directly await the
event, you will get an implicit Take(1).  This means that existing code won't
break:

    // Since the return type of Select isn't SingleAwaitSubject, our rigged
    // awaiter doesn't apply, they get the default one.
    await myWindow.Events().KeyUpObservable
    	.Skip(2)
	.Select(x => x.Key);
Merge pull request #586 from reactiveui/event-awaiter

Make events do The Right Thing automatically when awaited