Use processutils properly

Previously this code was calling processutils.execute incorrectly,
expecting it to return the exit code. This change:

* fixes calls to processutils.execute
* fixes related tests
* changes exceptions triggered by shell command failure to
  subclass processutils.ProcessExecutionError, to properly capture
  commands, stdout, stderr, etc. from processutils.execute().

Change-Id: I3343f104a5a8200d53bd87a8799ff918e375b17f
(cherry picked from commit 160d42debb62cb64d40915177d4c05e175abe1b6)
Add a HardwareManager method to erase devices

Add erase_devices method to the HardwareManager class. By default this
method iterates block devices, and calls a new abstract
erase_block_device method for each device. This patch includes a
simple implementation of erase_block_device on the
GenericHardwareManager which attempts to issue an ATA secure erase on
supported devices.

Change-Id: I81da065395b8785f636f1b0a0d60c9f1c045441e
(cherry picked from commit dff46583d354ced83a056d404abc70fd3ac92de3)
Expose decom.erase_hardware command via API

Expose an async decom.erase_hardware command in the API. Executing
this command simply calls erase_devices on the loaded HardwareManager
implementation.

Change-Id: I238264a4d5903200ad6a30d82b61804c1e3f5916
(cherry picked from commit 263f97c0e0fe4792c5aca1ac107bc2d5bb38115d)
Fix HardwareManager loading order bug

The agent attempts to sort the HardwareManager implementations found
by stevedore in order of suitability. This patch fixes a bug in the
sorting order that caused the GenericHardwareManager to always be
loaded.

Fixes bug 1327923

Change-Id: I1cc20e5351a704325f0cf41dab205c9164799f6a
(cherry picked from commit d785d3edc8d8105bd9c114f750c565c66c6239cc)