Implement glance client plugin

This moves the client creation code out of Clients._glance() into
its own client plugin.

Glance is a core project, and python-glanceclient is a dependency,
so the import is now mandatory.

Change-Id: If61f2510344bf67b7e9aded1dc9d9cedf2426228
Implement neutron client plugin

This moves the client creation code out of Clients._neutron() into
its own client plugin.

Neutron is an integrated project, and python-neutronclient is a dependency,
so the import is now mandatory. Also any conditional code which skipped
if the neutron client was missing has been removed, since the presense or
absense of an installed neutronclient has no bearing on whether neutron
is installed on a given cloud.

Change-Id: Id9fdc50e80efe78731e21934ed9f2704cc3eb408
Merge "Implement glance client plugin"
Merge "Implement neutron client plugin"
Improve mocking in HeatTestCase

As the mock lib is going to be used more actively, there is a need
to improve our boilerplate code in respect to mock.

Changes in this patch include:
* `patchobject` method now uses `mock.patch.object` directly,
  without two layers of abstraction
  (those might be a crust from earlier mock days, but current mock
  does all that just fine by itself);
* `patchobject` now accepts kwargs and passes them to `mock.patch.object`;
* added `patch` method that uses mock.patch (similar to `patchobject`)
  - NOTE: this shadows `testtools.TestCase.patch` method that uses
    simple monkey-patching in favor of mock-based patching,
    relevant comment added in the code;
* test code changed accordingly where needed.

Change-Id: I779cab63249d5eb1962e9ec388cd31f3df4a4189
Fix monkey-patching occurence in a test

A test of Resource class was using a direct monkey-patching of a
generic resource class without cleanup. This has not resulted in an error
so far, but surely might in the future.

This patch uses proper mock for patching instead.

Change-Id: I9134dfc625e12df1ebcacda8373f81737fd59c2c
Add update_replace_allowed property attribute

Currently resources support only in-place update or (default)
UpdateReplace. In order to support AWS "Updates are not supported"
feature, this new property attribute is added.
It is going to be used for denying an UpdateReplace
behavior of the resource (similar to update_allowed currently).

Change-Id: Ie94241630d9595b58ff6b84bcb94459b0785fc03
Implements: blueprint aws-updates-not-supported
Check for update_replace_allowed in rsrc update

This patch adds check during resource update that the updated property
is update_resource_allowed. Otherwise update raises NotSupported error.

Change-Id: I91019cb34adfcbe67d8c802d4ce1ff7702656a7c
Implements: blueprint aws-updates-not-supported
Deprecate updates to AWS::EC2::VolumeAttachment

According to AWS docs AWS::EC2::VolumeAttachment resource does not
support any updates [1]. As updates to our AWS-compatible resource are part
of Icehouse release first issue a deprecation warning and leave a
comment in code to move the update logic to the native
OS::Cinder::VolumeAttachment resource after deprecation period.

[1] http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ebs-volumeattachment.html

Change-Id: I54d302dbec66ddd49c4a774376df99e7e9d63980
Partial-Bug: #1340096
Implements: blueprint aws-updates-not-supported
Move size update to Cinder volume

In order to align AWS compatible Volume resource with current AWS
behavior, this patch moves volume size extension to the native Cinder
Volume resource and marks all properties of the AWS::EC2::Volume resource
as not updateable even with UpdateReplace.

Change-Id: Ie1410d98175e1e42a95ca0fba72c48ca643a0dc7
Closes-Bug: #1340093
Implements: blueprint aws-updates-not-supported