libvirt: Consider numa_topology when booting

This patch hooks all the already introduced pieces together to enable
NUMA aware placement of instances.

The libvirt driver boot process now looks into the NUMA topology field
of both instance and the host it is being booted on, and based on that
adds some more configuration to the generated guest XML.

In case the host is NUMA capable, but the instance has not requested
a NUMA topology, we will try to pack the instance into a single cell.
If that fails, currently we will not make further attempts (although
an improvement could be to expose the underlying topology to the
instance).

In case the host is NUMA capable, and instance has requested a specific
NUMA topology, we will try to pin the vCPUs of different instance NUMA
cells to the corresponding host NUMA cells, and also expose the instance
NUMA topology to the guest OS.

We will still try to respect CONF.vcpu_pin_set option and avoid pinning
to CPUs that are not in this set.

DocImpact

Change-Id: I611d44ab75475028f63c2b7f8a0d2ef37d85be6e
Blueprint: virt-driver-numa-placement
Merge "libvirt: Consider numa_topology when booting"