args: fix strtoul error checks
args: fix strtoul error checks

strtoul does not reset errno to 0 in case of success, so if errno
previously was EINVAL or ERANGE we could report and error incorrectly.
Conversely, we could not complain if strtoul did a partial conversion
e.g. `ashuffle -o 42foo` would work.

Pass an "endptr" argument and check that we fully consumed the argument
instead, and that it was not empty.

Also add a check that an argument was passed at all while we are here
(so `ashuffle -o` now errors instead of behaving as if -o was not passed)

Fixes: #23

Joshkunz/ashuffle