Allow ARGV to be mutated during option parsing

Fixes issue #968

Disgustingly long commit message included, as per @banister's request on IRC. :yum: 

Thanks for taking the time to chat about this!