Begin working on optparse module.
Add option_set class. Make option class copyable. Add is function to
option class to check argument equivalence.
Add option_parser class. Fix documentation errors and automatically
provide the help option when instantiating an option_set.

Also add a remove member function to remove an option from the
option_set.
Allow users to query state from the errors thrown including program
name and the option name.

Document the raw_parse member function as well.
Add store_const action, bind_to, and constant factory functions.

Fix bugs with takes_value, process_subcommand, and long options not
being found.
Add get for option and option_set. Fix bug in clone member function.
Add get_or for option, typed_value, and option_set. Add value factory
function for easy creation of typed_value polymorphic types.
Add formatter API.
Make options be boolean switches by default.
Add parse member function that handles errors.
Add list and compose factory functions for a list of arguments and
a composing list of arguments.
Fix bug when setting program_name that would throw errors.
Add traits enum for extra enum boolean configurations.
Add tests. Remove -Werror. Remove reference to added element from
add due to std::set having pure const_iterators.
Add tests for subcommands.
Add checking for required arguments.
Add tests for required arguments.
Add constructors for initializer_list to subcommand and option_parser.
Allow specifying metavar from the factory functions. Add custom
factory function to invert the order of parameters. Also add the
factory functions into the optparse documentation group.
Better organisation of documentation for optparse.