Modified from busterjs/posix-argv-parser.

Added support for the generation of a help, usage, and version messages.

Changed option definition to allow options which take parameters to support
an array of multiple values. This broke compatibility with pre-fork version.

New option.create options:
'allowMultiple'
'allowOverride'
'valueName'
'groupName'

New validators:
positiveInteger([msg])
isURL([msg])
isURLOrFile([msg])

New methods:
printHelp()
printUsage(errors, verbose)
printVersion(version, verbose)