Handle skipping whole or part of group

Each group has a "completed" mutable bool that determines whether it has
been exhausted or not.  The Group destructor checks the flag and if it
is false, it exhausts the group.
Adds test for skipping whole group
Replaces pointers with references in groupby
Removes unnecessary Iterator& in GroupIterator
Make Group movable, not copyable
adds comments explaining 'completed'