Raise a descriptive error if non-positive integer passed to in_groups_of

This is more consistent than the current behaviour of raising a
"ZeroDivisionError: divided by 0" error when 0 is given, which can be
non-obvious especially if `in_groups_of` is part of a longer chain of
methods.

The negative case was ok - "ArgumentError: invalid slice size" - but
this error is clearer still.

Since it then becomes trivial to handle other invalid input such as nil,
handle that as well.