Method for getting NUMA usage from an instance

At present, neither ResourceTracker nor HostManager use objects
consistently. Due to that - we need to handle numa_topology being both
a json blob, instance of VirtNUMATopology, or None at different places
in the code. In addition to that - it can either be a field in a dict,
a NovaObject attribute, or even an attribute on an object that does not
support .get() interface.

Polluting the VirtNUMAHostTopology.get_usage_from_instances breaks
separation of concerns, and is just poor design, but we do need to go
through the same logic in several places, so we add a convenience method
that knows how to deal with all the different combinations described
above.

We also add a separated out method for getting the numa_topology out of
all the possible ways we use instance currently, as it will be useful
for filtering to know if the instance actually has a defined
numa_topology.

Change-Id: I91c3a77153ef8e5e701d3bc7af37ff0a2943fc0c
Blueprint: virt-driver-numa-placement
Merge "Method for getting NUMA usage from an instance"