Feature/option parser facade

Hi, Paul.  I worked out what happened - my changes were in "develop" rather than my feature branch, which had been identical to your master.  I've fixed my repo.  :)

This request isn't so much for merging as discussion.  I've extracted the "setup" parts of `OptionParser` to to `OptionDeclarer` so I can use that as a facade in my client code without exposing `parse(args)` and friends.  I took a stab at an interface name, not sure about it.

What do you think?