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.
That doesn't really help the chaining. :stuck_out_tongue: