Refactor Stream<T>, implement basic Observable<T> ops, change Observer into a closure

The core of these changes is the new `flattenScan()` function, which performs the role of `>>=` _plus_ early termination and some state. In other words, it's equivalently powerful to [`-[RACStream bind:]`](https://github.com/ReactiveCocoa/ReactiveCocoa/blob/9c9912f64e994af45a9adbb6306d2a101f2cbbe3/ReactiveCocoaFramework/ReactiveCocoa/RACStream.h#L37-L48), but more pure.