A ConfigLoader does one thing: load a config from a source
(file, command line arguments) and returns the data as a Config object.
There are lots of things that ConfigLoader does not do. It does
not implement complex logic for finding config files. It does not handle
default values or merge multiple configs. These things need to be
handled elsewhere.

After loading, any arguments that are not key-value or
flags will be stored in self.extra_args - a list of
unparsed command-line arguments. This is used for
arguments such as input files or subcommands.

Parameters:

argv : list, optional

A list that has the form of sys.argv[1:] which has unicode
elements of the form u”key=value”. If this is None (default),
then self.argv will be used.

aliases : dict

A dict of aliases for configurable traits.
Keys are the short aliases, Values are the resolved trait.
Of the form: {'alias':'Configurable.trait'}

flags : dict

A dict of flags, keyed by str name. Values can be Config objects
or dicts. When the flag is triggered, The config is loaded as
self.config.update(cfg).

A config loader that loads aliases and flags with argparse,
but will use KVLoader for the rest. This allows better parsing
of common args, such as ipython-c'print5', but still gets
arbitrary config with ipython--InteractiveShell.use_readline=False