Create a little DSL for describing options.

Instead of calling optparser.on and opts.attribute directly, call
option and attribute methods that simply delegate to these objects.
This will also make it easier to refactor things in the future.
Add tests for command line options.

Improve NullObject with the ability of values to be Proc's, which
will be invoked to provide more complicated logic.

Give names for all validators, so we can call them out by name in our
tests.

Add validator for :processes option.
Write most boolean options in --[no-]opt style.

Implement full tests for them all.
Speed up options testing.

Reset the defaults every time the Options::Parser#parse method is
called.  This allows us to re-use the parser which is slow to instantiate.

Some tests still need to re-instatiate the parser every time - move
these to a separate suite, so only the tests that need it will run
slower.