Make internals lazily created to allow flexibility

Closes #65

There's no real reason that `main` has to be where the internal
state of the module gets created.  So, lazily created the options
hash and option parser so that calling other DSL methods before main
will work.