takeWhile(predicate) {
        let seq = this._iterable;
        return Seq.fromGenerator(function*() {
            for (let e of seq) {
                if (!predicate(e)) {
                    break;
                }
                yield e;
            }
        });
    }
Returns a sequence with the same items, until one of the items fails to match the given predicate. Then the
sequence is cut short just before yielding that item.
@param {!function(T) : !boolean} predicate
@returns {!Seq.<T>}
@template T