Add ArgumentArray with #raw

This replaces `arguments` with a custom `Array` subclass that implements `#raw`, which returns the arguments *including* the `--` which can be used for disambiguating arguments (e.g. `git checkout -- HEAD` vs `git checkout HEAD --`).

To do:

* [ ] Add more tests that cover not only the option parser, but also the commands and the command runners