Add instance_extra table and related objects

This patch adds the table for storing the instance NUMA topology, as
adding it on the model itself as a text field is thought to be bad for
perfomance.

We need to add it as scheduling based on it and tracking resources
proves to be impossible otherwise as we would have to rely on
re-calculating it from data stashed in system_metadata table, which is
deemed even more inefficient if it needs to be done in a periodic task.

We add the objects so that we can make sure that data is versioned, and
the relevant database models methods and the migration for adding the
table.

Blueprint: virt-driver-numa-placement
Change-Id: I724ed7089044177ec4fecdf4fdcefad96a2466b6
libvirt: Add method for getting host NUMA topology

We can get this information from the libvirt capabilities XML now, so we
add a method that returns it in the form of
virt.hardware.VirtNUMATopology objects. We will exclude any CPUs not
found in the CONF.vcpu_pin_set.

Change-Id: Ibfc60bc71e49579bc5ab4996b752ed7a49830b6a
Blueprint: virt-driver-numa-placement
Merge "Add instance_extra table and related objects"
Merge "libvirt: Add method for getting host NUMA topology"