gracefully handle invalid command-line arguments

Abort but avoid showing stack trace
gracefully handle errors about invalid/inaccessible files
show `--help` normally, not on stderr

The only way a person can get help output is when they've explicitly
asked for it via `-h` or `--help`, which means it should be printed on
stdout. Also it doesn't make sense to list `-h/--help` in help ouput,
since you had to know the flags to get the help in the first place.
`-v/--version` shows version information