Make events do The Right Thing automatically when awaited

Consider the following (incorrect) code:

```cs
    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:

```cs
    // 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);
```