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.
No, but I'm trying to flip `flatten` and `concat` so they can be used (effectively) like this:

```swift
s.flatten().concat()
```

instead of like this:

```swift
concat(flatten(s))
```

Just like every other stream operator. They shouldn't live _within_ the `Stream` definition, though, because they can only operate on a specific kind of stream (a stream of streams).

Making them global functions ensures type-safety, and adding this `|>` operator recovers chaining.