code: def lazy_groups_of(iterator: Iterator[A], group_size: int) -> Iterator[List[A]]:
      
      return iter(lambda: list(islice(iterator, 0, group_size)), [])
docs: Takes an iterator and batches the individual instances into lists of the
      specified size. The last list may be smaller if there are instances left over.