Standard source tree refactoring
DIFFEO-92: Layered configuration descriptions

There is now a top-level entry point yakonfig.parse_args(parser, modules)
which takes an argparse parser and a list of modules.  Each module
may be a module or some other object matching yakonfig.Configurable's
interface.  yakonfig populates the argparse parser with options from
the module descriptions, finds default configuration values from the
module descriptions, parses the command line, loads a global
configuration file if provided, and overlays command-line options.
Submodules, set_default_config extensions.

A Configurable declaration can declare sub_modules, which is a list
of Configurable objects, and their configs should be contained in this
object's config.

set_default_config() can be passed a YAML string or filename which
will be overlaid as though it were the input config.
"with defaulted_config(...)" resets the global config after completion
(and is really for tests).
DIFFEO-95: reduce top-level config checking

parse_args() only calls check_config() for the last thing in the
module list.  But, there is also a check_toplevel_config() that checks
that a top-level item is present and correct that check_config() can call.
set_default_config() can take a config dictionary in too

...and similarly defaulted_config().  Needed for things like rejester
work flows that pass Python config dictionaries around.
Split overlay/diff into yakonfig.merge