Prepend an item to the beginning of an iterable
function unshift(...next) {
    return function* (it) {
        for (let i = 0; i < next.length; ++i)
            yield next[next.length - i - 1];
        yield* it;
    };
}