distinctBy(keySelector) {
        let seq = this;
        return Seq.fromGenerator(function() {
            let keySet = new Set();
            return seq.filter(e => {
                let key = keySelector(e);
                if (keySet.has(key)) {
                    return false;
                }
                keySet.add(key);
                return true;
            })[Symbol.iterator]();
        });
    }
Returns a sequence with the same items, except later items with the same key as earlier items get skipped.

@param {!function(T) : K} keySelector Items are considered distinct when their image, through this function, is
not already in the Set of seen images. The return type must support being inserted into a Set.
@returns {!Seq.<T>}
@template T, K