reactiveui/ReactiveUI — pull request #586 by paulcbetts (2014-05-10 15:35:10+00:00)
Title: 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);
```