[DEV] Proper calculation of dependency chain
[DEV] Deeper configuration loading

- Setting the instance variable .supercfg to a list will load each list item as a configuration, in list order.
  List items should be a tuple of (module,filename) for resource_filename()
[DEV] Removed Methods and added ErrorClass

- Duplicate renest and deepmerge removed
- Custom error class for configuration errors added
[BUG] PyPackage Conforms to abstract module rules

- Module is now defined in pypackage classes
[DEV] Help and supercfg support for subcommand

- Subcommands now have a help attribute which will be used in the parser's help field.
- Subcommands now have a supercfg attribute which will work with the general supercfg list.
[DEV] Directory Utility Functions

- collapseuser(path) does the reverse of os.path.expanduser(path), turning any path that sensibly can, into "~"
- check_exists(path) returns a boolean for whether a path exists, expanding "~"
- warn_exists(path,name,exists) warns the user if a path doesn't exist (with exists=True, else with exists=False, ensures it doesn't exist). When the criteria are met, a UserWarning is raised.
[DEV] Dependency on jinja2
[DEV] Changes to __contains__ for config

- New _strict attribute controls how harshly a configuration checks for membership:
- When _strict = True, configurations will KeyError for any key not actually initialized.
  config["foo.bar"] will cause a key error on "foo"
- When _strict = False (default), configurations will KeyError only on final keys:
  config["foo.bar"] will cause a key error on "foo.bar", but will create the intermediate "foo" by default.

The _strict = False mode allows for assignment using the following syntax:
  config["foo.bar"] = "bat"
However, it means that doing:
  del config["foo.bar"]
  "foo" in config == True
[BUG] Fixed directory function bugs
[DEV] New Utility Functions .util

- is_type_factory(type) generates a single argument function is_type(obj), and returns whether obj can be used to construct the desired type.
- join(*args) joins each argument like os.path.join(), expanding user at the end.
- query_string() uses the validate method's __hlp__ or __doc__ attribute to provide validation feedback to the user.
[BUG] util.query_stirng __doc__ printing

The query_stirng could try to access the __doc__ property of a function which has no documentation. FIXED
[DEV] Better creation and inheritance methods

- Configuration objects have a class method .create and an instance method .configure
- Both take the same syntax, and resolve a standard order trying to find additive configuration files.
[DEV] Support for new config methods

- Configuration order etc. is now handled by the .config module's methods
- Support for the _exitcode attribute, which sets how the script should return.
[DEV] A generic logging configuration file.

This file can be used as a supercfg like:
  supercfg = [('pyshell','logging.yml')]
[DOC] Improved documentation for logging.yml
[DEV] Pyshell Logging Configuration Constant
[DEV] All subcommands inherit from CLIEngine
This allows subcommands to be run independently, or as part of a master group.
Much improved documentation for subcommand
[DEV] Improvements to the CLIEngine

- Support for 'conflict handlers'
- '.exitcode' attribute for CLIEngine
- Private help argument methods (_add_help and _remove_help)
- configure_logging method
- Support for 'config' in engines which have not parsed that argument.
- Kill is now a shell function
- Run handles SystemExit and KeyboardInterrupt differently
[DEV-BUG] Merge sequences

- Sequences are only merged in advanced merge, which is not used by default.
This change was made to allow incoming configurations to override instead of append-to an existing sequence. Only allowing sequences to be joined caused configurations to be un-able to remove sequence elements.