Refactor and partly parallelise stack update code

Make this easier to read, and also use co-routines to make it run in
parallel where possible.

Change-Id: Ib37f4c04bd250cb15604ba9adb4cca8a97a2c4fb
Simplify a stack update unit test

Separate out the two resources into separate classes that can be mocked (or
not) independently.

Change-Id: I0d8fc73262256330c0f3e7fd50cc655a12332dc4
Cache snippets in StackUpdate

Change-Id: I1720a7c14edaf1d70b0894c2a4655f101d1c38eb
Allow a resource delete to be re-attempted.

If a resource is in a DELETE IN_PROGRESS state, and the resource
is deleted again, another attempt will be made to delete the resource.

Fixes bug: #1193975

Change-Id: I615612b4e5f21f2a2cb168f47c33a8f9db7e9e81
Add initial suspend logic to engine

blueprint: stack-suspend-resume
Change-Id: Icf81672534de6b07d938785e659b7f6c733eacc4
Allow JSON values for parameters

Adds a paramter type that accepts JSON objects or strings representing JSON
objects as values.

Implements: blueprint json-parameters
Change-Id: I1ad62df28832a2e07249452133fd9f14995f8e23
Store created nova client in OpenStackClients.

All created clients are stored in the instance of OpenStackClients
which is associated with a stack - this prevents clients from
being repeatedly created throughout the request.

Commit f3fc5c5 introduced a regression which stopped storing the
nova client. This change addresses that regression.

Change-Id: I60088b60f623aac11e473d185f2924d4f4bd1cfe
OS::Quantum::Subnet resource, add enable_dhcp

Add enable_dhcp to the properties schema, since quantumclient
code indicates this is allowed in the body (not only expected
in the response as currently indicated by the docs)

Fixes bug #1194394

Change-Id: I19770b033696ea9a27b6e985a52bf2cfadb16f52
Merge "Add initial suspend logic to engine"
Handle YAML parser error as well

Fixes bug: #1185590
Change-Id: Id561e2769d1f0192dd831450f10e05e8213bffa8
Merge "OS::Quantum::Subnet resource, add enable_dhcp"
Merge "Allow JSON values for parameters"
Merge "Refactor and partly parallelise stack update code"
Merge "Simplify a stack update unit test"
Merge "Handle YAML parser error as well"
Merge "Allow a resource delete to be re-attempted."
Merge "Store created nova client in OpenStackClients."
engine : stack_resource change state_description to status_reason

The internal API changed this name recently, but this got missed
due to lack of test coverage for this exception.  Turns out adding
that test coverage is really hard due to all the coroutine magic,
so we'll have to fix that at some later time.

Change-Id: I98a0c5bb8f3f001a7d215bcdf64cad841e42ef85
Merge "Cache snippets in StackUpdate"
Merge "engine : stack_resource change state_description to status_reason"