Do not destructively consume ARGV

Previously we were calling parse! which has the side effect of deleting
options from ARGV as it recognizes them. To work around this behavior
in previous commits, the desired options needed to be saved before hand.
Simply not mutating ARGV is much easier. Also adds a test.