Move out option merging from parser

ArgumentParser should only handle parsing, not merging of options with
parsed arguments.

Tests were moved to cli_spec and rewritten somewhat.