Issue title: class Observable<Element> non public init
 Issue body: Add the following to RxSwift framework codebase:
```
public class S<T> : Observable<T> {
   public override init() {
      super.init()
   }
}
```
it compiles. However take the same and place in separate project that links against RxSwift and you get compile error due to init() not being declared public in Observable. Is this by design to stop subclassing of Observable outside of RxSwift.framework or oversight? If by design what is the reasoning?

Thanks Mark
 Comments: 
 Comment 0: Hi @mwoollard ,

this is by design :) This was the end result of trying a lot of things out. If you want to create an `Observable` sequence you do it by invoking `Observable.create` and pass a lambda.

ObservableType:
* implementor says that it is observable
* but you can't have `ObservableType` as a type parameter in Swift because it has associated types
* since anything can implement it, there are no guarantees that sequence grammar is honored - Next * (Completed | Error)?

Observable:
* anonymous observable sequence
* you can use it to specify type of parameter/property ...
* it guarantees that after `Completed` or `Error` is received, observer/sink is closed and thus no new event can be produced

That is also a reason why we do `asObservable` before we pass `ObservableType` to operators in our code base. I could actually document this all of this in inline documentation of `Observable`.

If you do `asObservable` on `Observable`, it's a no op ;)

The reason why it's not final is because although we don't trust external implementors, we do have some internal classes that inherit from Observable for certain reasons.
 Comment 1: Thanks for the explanation !
 Comment 2: I'm supposing we can close this then :)
{'source': 'GithubIssues', 'repo_name_with_owner': 'ReactiveX/RxSwift', 'issue_id': 133417835, 'repo_stars': 23352.0}