Add optional `chunk_size` argument.
Add optional `chunk_size` argument.

This allows us to emit side effect for chunks.  This is useful because you can still process the result as a continuous stream, making chaining much easier.  It basically saves you from the ceremony of otherwise having to do this:

    >>> iterable = range(100)
    >>> iterable = chunked(iterable, 30)
    >>> iterable = side_effect(do_something_with_chunk, iterable)
    >>> iterable = flatten(iterable)
    >>> list(iterable)
    [0, 1, 2, 3, ..., 99, 100]

more-itertools/more-itertools,erikrose/more-itertools