Organize agent extensions

Move extensions under an ironic_python_agent.extensions module. This
change also moves the @async_command() decorator into the base
extension module.

Change-Id: I4021fcc33a30f3460a31bca44a4bf776cd53d488
Add a @sync_command() decorator

Instead of special-casing syncronous commands, add a decorator similar
to @async_command(), which can be used to decorate extension methods
for execution as a synchronous command.

Change-Id: I1b27f179f667cb065bcffd71ae0f303b05d33b82
Added metaclass statement

Added metaclass statement in base
HardwareManager class. It is necessary
in order to make it really abstract.

Change-Id: I2fa68f8cb11920d85989ba3589b4a394f17d42ae
Deprecated extension name attribute

It seems not to be used, so it is not needed.

Change-Id: Ie46470d888ff11edaf16b94e5b2e716d13cf764f
Closes-Bug: #1308017
Merge "Added metaclass statement"
Decorated commands no longer take command_name

Prior to the (sync|async)_command decorators, extension methods had to
construct command results themselves, which required that they have
the name of the command being executed.

When the async_command decorator was introduced, we wanted to maintain
the current command interface, so that a command could be made
asynchronous simply by adding the decorator.

The introduction of the sync_command decorator allows us to satisfy
this objective, without requiring decorated methods to accept a
command_name. This patch modifies both decorators to no longer pass
the command_name argument, and modifies existing command methods not
to expect one.

Closes-Bug: #1308021
Change-Id: I1b33bb7519588cdcb79c6f4d2b10c1e5e8c0cca3
Merge "Decorated commands no longer take command_name"
Merge "Deprecated extension name attribute"
Use docker import/export to make image smaller

Using docker export gives us only the top filesystem layer and not all
the layers used to build. Resulting image is about 20% smaller. Further
optimizations will be made in future commits via removing build time
deps and temporary files in the Dockerfile.

Change-Id: I0f7ad6d00c6f47836dcd71b05907076701bb2789
(cherry picked from commit 99dba22eaa3961234abde1294e55026fd2cc9d4d)
Better documentation and defaults for coreos image

The existing coreos image required 20G+ of RAM, which isn't reasonable.
Also there was no documentation about how to get the image running, so a
sample configuration with iPXE was added. These changes are required to
help folks who want to use the agent now.

Change-Id: I845bebf17c62653521282863d596ac512dd6b82e
Fix wait argument on POST

Its type was not declared. Adds tests for this.

Change-Id: Iba05ce38f7548cc8400ac78493ef16b5e69905bb
Accept new parameters for `prepare_image`

The parameters sent to `prepare_image` changed in
https://review.openstack.org/#/c/86490/

This patch brings `prepare_image` up to date with that change.
It also changes the way configdrive is written to disk, to match
that Ironic is now allowing Nova to build an ISO partition and
send the raw image to the agent.

This patch also swaps out subprocess.call for processutils.execute
in the standby module, since the commands were being changed anyway.

Change-Id: Id8af9be920ba51e7e1ce60f4ffd1477e413582c9
(cherry picked from commit 836aabd1203b484f344f3a6b3d596e04f2c2a286)