Common stack_user_project_id across nested stacks

Currently the stack_user_project_id creation is deferred until
a resource actually needs to create a user in it. This means
for stacks with nested stacks there is a mixture of
stack_user_project_id values across the stacks (including None).

This causes issues when deployment resources are in one nested
stack and server resources are in another since deployments
are filtered by matching stack_user_project_id.

This change creates and assigns stack_user_project_id during
stack creation, and propagates this stack_user_project_id to
any nested stacks so that all stacks in the tree share a single
stack_user_project_id.

Closes-Bug: #1343163
Related-Blueprint: deployment-multiple-servers
Change-Id: Ia161ec9989fe0e0792967d9e1e20361e67f46fe1
ResourceGroup subclass build resource definition

This refactor allows a ResourceGroup subclass to contribute its own
resource definition by overriding method _build_resource_definition.

Change-Id: I4176935f0fe3af900501852ffda621e708c36d24
Partial-Blueprint: deployment-multiple-servers
ResourceGroup build from list of resource names

This changes ResourceGroup internal implementation to be driven by
a list of resource names rather than a count of resources.

This maintains the current behaviour of sequential number resource
names, while allowing subclasses to choose a completely different
resource name scheme.

Change-Id: I17d046155f8d830ced789ede6a969ac4f125576d
Partial-Blueprint: deployment-multiple-servers
ResourceGroup make do_prop_replace class method

This refactor allows subclasses to override _do_prop_replace so
that properties can be populated by the specific needs of the subclass.

Change-Id: I1ebe382b8efd010e128fa9c452d5ddb580237c1e
Partial-Blueprint: deployment-multiple-servers
Provide access to outputs from OS::Heat::ResourceGroup

To align with the related OS::Heat::AutoScalingGroup change:
Ib9e830e0c54602ac456d64179e1df30f0778906d

This adds an outputs attribute to the OS::Heat::ResourceGroup resource
so that the following:
  {'get_attr': ['my_asg', 'outputs', 'networks', '<network_name>', 0]}
returns a mapping from resource names to the corresponding IP addresses.

There is no need for an outputs_list attribute since the following already
returns a list:
  {'get_attr': ['my_rg', 'networks', '<network_name>', 0]}

Change-Id: Id51f23533ae75ca5d883a4f67e75ac9513a67264
Implement OS::Heat::StructuredDeployments

This is a resource which subclasses ResourceGroup to deploy a group
of OS::Heat::StructuredDeployment resources

The main difference in properties between this resource and
OS::Heat::StructuredDeployment is that it has a 'servers' property
instead of 'server'. The servers property expects a map of
resource-name/nova-uuid pairs. The resource name is used as the
deployment resource name inside the group, and the nova-uuid is used
as the server to deploy to.

This resource also inherits the index_var property from ResourceGroup.

Change-Id: I5f9603c68bb7cd81ef60a6b2ba965e5b8e93887a
Implements-Blueprint: deployment-multiple-servers