Allow for monitors to exist without groups

This will let people configure monitors by themselves, then add them to
different groups as the groups get created.
Allow Groups to be created with nodes & monitors
Need my values to stick around in the registry

There are places where the registry is thought to be the only location
of the various object types.  A WeakValueDictionary made this
impossible.  I may regret this later, but for now this seems like the
right thing to do.
New config system
Add some logging
Moving load_resources into here

Also getting down to just formatting commands, we'll get back to
executing them here soon.
Allow for defaults in config.
Deal with .py extension on resources
Allow for ~'s in path
Clean up some variable names
Update for better functionality
Base library for executing external commands
Simple tests for commands.py
Allow nodes to specify groups as strings
Handle KeyError a bit better
Moving the settings singleton out of __init__

Also made the whole 'default settings' process a bit simpler.
Re-introducing yaml configs
Add versioning & reloading of the config
New load_resources for yaml resource definitions
Now returns hash of loaded config