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.
This combines the stream-of-streams on the left into a single stream using the function on the right. It's kinda meant to resemble a funnel.

So, you should be able to do this:

```swift
let s: Stream<Stream<Stream<T>>>
s |> flatten |> concat
```