flattenLatest() {
        return new Observable(observer => {
            let unregLatest = () => {};
            let isDone = false;
            let unregAll = this.subscribe(subObservable => {
                if (isDone) {
                    return;
                }
                let prevUnreg = unregLatest;
                unregLatest = subObservable.subscribe(observer);
                prevUnreg();
            });
            return () => {
                isDone = true;
                unregLatest();
                unregAll();
            }
        });
    }
@returns {!Observable.<T>} An observable that subscribes to each sub-observables arriving on this observable
in turns, only forwarding items from the latest sub-observable.
@template T