Add TaskManager lock on change port data

Updating port data may require driver actions on the related node
(if address changed for example). New method 'update_port' added
to conductor manager and rpcapi.

Partial-Bug: #1276393
Related-Bug: #1236714
Change-Id: I1f817a8b3c80630f40fd36c82e533d5358225150
Conductor logs better error if seamicroclient missing

If the driver is installed and the python entrypoint discoverable, but
the external library is not present, the conductor will log exceptions
during startup and remove the *_seamicro drivers from the list of
drivers it advertises support for.

This patch tests the imports and raises one DriverNotFound error for
each affected driver if python-seamicroclient is not installed, instead
of raising several ImportErrors.

This also removes python-seamicroclient from requirements.txt

Change-Id: I5cde3c3e8c7cbc2bf4991c0ed390ac655dcdbc7c
Merge "Conductor logs better error if seamicroclient missing"
Generic MixinVendorInterface using static mapping

Use a MixinVendorInterface and a dict for static mapping,
so every method:vendor interface mapping is explicit.

Example:

self.pxe_vendor = pxe.VendorPassthru()
self.ipmi_vendor = ipminative.VendorPassthru()
self.mapping = {'pass_deploy_info': self.pxe_vendor,
	        'set_boot_device': self.ipmi_vendor}
self.vendor = utils.MixinVendorInterface(self.mapping)

Partial-Bug: #1264596

Change-Id: I5dd5a02164670476b0d6ff121bed57569c341a61
Merge "Add TaskManager lock on change port data"
Improve Ironic Conductor threading & locks

Ironic Conductor is not consistently using worker threads and
locks as it should.  Instead, it should be using greenthreads
where appropriate to spawn off tasks so that Conductor is freed
up.  This patch corrects do_node_tear_down().

Change-Id: Ia707766855bd7ec47a5af05e119b126504ddc0b1
Partial-Bug: #1285507