adding and verifying some basic CLI unit tests
Testing 'help' and 'version' throws

Had to rework the Option readers and break off a `parse!` method to
be able to throw the opts explanation msg with 'help'.  Chose to
implement catch/throw for this rather than exception.  There is no
error so it feels silly to raise an exception.
moved passing in the args to parse to the `parse!` method

Makes more sense here.  Plus you can create one CLI and use it to
parse many arg sets.
added a bunch of parsing unit tests