Move argument objects out to separate file

As the abstractions grow, I think it makes sense to move the
arguments object portion of the domain model out into its own
module.
Move __init__ of base arg class into concrete classes

This cleans up the interface between the base arg class
vs. the concrete implementations.  Also renamed the
BuiltInArgument with the DictBasedArgument, as BuiltInArgument
can be used in extensions so the name is misleading.
Raise NotImplementedError in arg base class
Require explicit args to DictBasedArgument

This restricts the set of allowed args that can be passed
to DictBasedArgument.  This makes it easier to read because
rather than taking a dictionary we specify *exactly* what
arguments we accept.

Also removed metavar from the model.  This is only used for
display purposes which bcdoc does not look at.
An __init__ to base cli arg that accepts a name
Give default implementations to CustomArgument
Switch to py_name for argparse destinations
Remove customization's CustomArgument

No longer needed, use arguments.CustomArgument.
Update bundle instance to latest argument