Allow unittests to set custom command line args
Add test cases to catch #91
Don't replace "_" with "-" in option internals

The replacement logic in callers, etc has been reworked since the
initial implementation.

I've added test cases for all known expected use-cases, so there
shouldn't be any surprises here.

Fixes #91