Implement model_from_config and use it in DeployOptions

We've
 * added a new `Configuration` class, which
 * validates the supplied configuration dictionaries using two new private methods,
 * _applications_from_configuration, which does basic validation and returns a dictionary of `Applications`, and
 * _deployment_from_configuration, which does some basic validation and cross referencing with the applications dictionary, before returning a set of `Node` s which are then supplied to a
 * `Deployment` instance returned by
 * `model_from_configuration` method
 * which is assigned as a free function in the `config` module.
 * Finally we've updated the `DeployOptions` class to use that function to process the supplied yaml files.

We can raise further tickets for the extra validation steps that we'd planned.

Fixes: #203
Fixes: #220 
You should catch the exception raised by this function and convert it into a `twisted.python.usage.UsageError` so it gets rendered nicely for the human running the program.