Configuration includes and overrides.

Sorry, this PR actually builds on PR 645.  As in PR 645 this includes the ability to include configuration files either at the top level with an "include:" or the !include syntax to pull a file in at a deeper level in the configuration.

The other commits cleanup some of the configuration API and then define some values to be of type final, I believe this to be more concise than the previous API.

And finally, when parsing the configuration file and a top level key that already exists is redefined, override it.  The exception is for final type values, we don't want to override them as they may have been set on the command line, which means they should take precedence.  There are other ways to go about this, but this seemed pretty straight forward (to me anyways).