Resource type implementation for software deployment

Some notes on the implementation:
  * Whenever a config should be deployed, this resource loads the config
    and creates an ephemeral derived config which has the following inputs
    added to it:
    * deploy_server_id
    * deploy_action
    * deploy_stack_id
    * deploy_resource_name
  * When signal_transport=CFN_SIGNAL, the folling input is added:
    * deploy_signal_id
  * When signal_transport=HEAT_SIGNAL, the folling inputs are added:
    * deploy_auth_url
    * deploy_username
    * deploy_password
    * deploy_project_id
    These inputs can be used by the hook *or* by the configuration script
    itself.
  * The ephemeral config also has the current input values inserted into
    the 'value' field of the config inputs. This allows the deployment
    metadata to be a simple list of configs.
  * Subclasses of SoftwareDeployment can make further transformations to
    the ephemeral config, such as transforming the config script to contain
    input values.
  * SoftwareDeployment is a SignalResponder so that it can receive
    output value updates from the server via curl or cfn-signal
  * By default, SoftwareDeployment remains in an IN_PROGRESS state
    until a signal is received
  * If wait_for_signal=False the resource will go immediately to COMPLETE
  * A deployment resource can be configured to deploy on any action.
    By default it deploys on CREATE and UPDATE
  * The outputs deploy_stderr, deploy_stdout and deploy_status_code
    are defined in the attributes schema, but other attributes map to
    whatever outputs are defined for the corresponding config resource
  * The resource will go into a FAILED state if an error_output output
    has a value, or if deploy_status_code is non-zero
  * If the 'name' property is set, this will set the 'name' property
    of the derived config, which will determine the sort order of configs
    returned when fetching a list of config metadata for a given server.
  * When an input_value is set where there is no corresponding config
    inputs schema entry, the derived config will add those input schemas
    to the derived input. This allows some templates to be more DRY.

Implements: blueprint hot-software-config

Change-Id: I97df5651dc6f27ed4ddc7355c21ab61270b15b68
Merge "Resource type implementation for software deployment"