Describe default values next to option definitions.

Created an #def_attribute method for creating an accessor for an option
and setting the default value.

Now the options are initialized close to where they are modified,
making the logic easier to see.
Extract OptionsRecord class from Options.

Storing the actual options in a separate OptionsRecord while processing
them inside Options class.

Lots of changes because a myriad of instance variable references needed
to be changed to point at @opts record.