Add support for fitting instance NUMA nodes onto a host

This commit adds the methods needed to enable fitting instances onto
NUMA nodes. It adds fit_instance_to_host() method to the
VirtNUMAHostTopology class that will do the fitting returning the
instance topology with it's cells assigned to the cells of a given host.

This method will be used in the scheduler and claims and will obsolete
the need for claim_test method which will be removed in subsequent
commits.

It is worth noting that after we transition filter and claims to use the
methods added to this patch - it will no longer be possible for an
NUMA-aware instance to be over-committed against itself no matter what the
over-subscription ratios are.

Partial-bug: #1386236
(cherry picked from commit d13205fb6036a6c7d66de350cb226dd0f9ee12d9)

Conflicts:
	nova/tests/unit/virt/test_hardware.py

Change-Id: I5fb6814778c2790cdd8892f756a33763b8f4a712
objects: Makes sure Instance._save methods are called

This patch makes sure that _save hooks are called for Instance object's
related objects even when they are set to None (if they are at all
nullable)

We will need this for numa_topology, as we need to be able to update it
on save, and make sure it's gone if the new one is None.

(cherry picked from commit 7335af1ea36be5ecf3f55b8c23857f678bbcbe39)

Change-Id: Ied9e760b40446661a6269e41df6091aa16fbfc82
Make Instance.save() update numa_topology

This is needed so that we can actually update the given topology with
the updated data after a successful claim.

Deleting it will also be needed when we actually make the resize work
properly for instances with NUMA topology, so we add it here as well.

We do not expose the new InstanceNUMATopology methods as @remotable to
avoid having to bump the object version thus making this an easier
backport target. This is OK since they are only called from
Instance.save() which is @remotable, and can be trivially made remotable
should this be needed later (causing a version bump that need not be
backported).

Partial-bug: #1386236
(cherry picked from commit a59e1a9c7e54efaadc39d366772972463855dfc7)

Conflicts:
	nova/tests/unit/objects/test_instance.py

Change-Id: I64ff2d00ca20bd065bb17ebaa9c40b64b8cbb817
Merge "Add support for fitting instance NUMA nodes onto a host" into stable/juno
Merge "objects: Makes sure Instance._save methods are called" into stable/juno
Merge "Make Instance.save() update numa_topology" into stable/juno