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
Merge branch 'argument-refactor' into develop

* argument-refactor:
  Update bundle instance to latest argument
  Remove customization's CustomArgument
  Switch to py_name for argparse destinations
  Give default implementations to CustomArgument
  An __init__ to base cli arg that accepts a name
  Require explicit args to DictBasedArgument
  Raise NotImplementedError in arg base class
  Move __init__ of base arg class into concrete classes
  Move argument objects out to separate file
Fix bug with argument_object on arg object

So there needs to be an argument_object on a param,
but it can be None.  The real fix is to update bcdocs
and the argprocess module to depend on this, but I'm setting
this to None in order to get the tests passing and this code
merged.