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

The core of these changes is the new [`flattenScan()`](https://github.com/jspahrsummers/RxSwift/blob/5f352fbbd050f2d1e0c6bf5f3372e4ae4566c82b/RxSwift/Stream.swift#L22) 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.
https://github.com/jspahrsummers/RxSwift/commit/52d82df76cea48474364f94ddac2e26e4d3f02a3#rxswift-event-swift-P5