CP-5854: Add GPU_group.allocation_algorithm field

Add the support to the datamodel for setting the allocation algorithm for a GPU
group. This is an Enum and can be either `depth_first or `breadth_first. This
will be used when allocating vGPUs on pGPUs within a GPU group at VM start
time.

Signed-off-by: Si Beaumont <simon.beaumont@citrix.com>
CP-5845: Add GPU_group.allocation_algorithm to CLI

Expose this field via the CLI and provide getter and setters. The user visible
names on the CLI match those in the requirements specification i.e. "capacity"
(= depth-first) and "performance" (= breadth-first).

Signed-off-by: Si Beaumont <simon.beaumont@citrix.com>
CP-5845: Use explicit allocation algorithm names

Using "performance" and "capacity" for breadth- and depth-first respectively
may lead to confusion and may not be future proof. Exposing the names of the
algorithms explicitly to avoid this.

Signed-off-by: Si Beaumont <simon.beaumont@citrix.com>
Merge pull request #1396 from simonjbeaumont/cp-5845

Add allocation_algorithm switch for GPU_group
Move supported_VGPU_types field to the PGPU object

Signed-off-by: John Else <john.else@citrix.com>
Rename the passthrough VGPU_type to "passthrough"

Signed-off-by: John Else <john.else@citrix.com>
Remove a no-longer-needed check

We now allow VGPU creation even if the type is not one of those allowed
by the group.

Signed-off-by: John Else <john.else@citrix.com>
Fix the VGPU_type <-> PGPU relation

Signed-off-by: John Else <john.else@citrix.com>
Add a helpful comment for future explorers

Signed-off-by: John Else <john.else@citrix.com>
Add a relation between a PGPU and its enabled VGPU_types.

Signed-off-by: John Else <john.else@citrix.com>
Initialise a PGPU's enabled VGPU types on creation.

enabled_VGPU_types is initialised to be equal to supported_VGPU_types.

Signed-off-by: John Else <john.else@citrix.com>
Add relation VGPU.resident_on <-> PGPU.resident_VGPUs.

Signed-off-by: John Else <john.else@citrix.com>
Add setters for PGPU.enabled_VGPU_types

Created methods:

* PGPU.add_enabled_VGPU_types
* PGPU.remove_enabled_VGPU_types

Signed-off-by: John Else <john.else@citrix.com>
Reimplement GPU_group.get_allowed_VGPU_types

We start with an empty set of VGPU types, and for each PGPU in the group
we fold its enabled VGPU types into the set. We end up with the set of
all VGPU types which are enabled on at least one of the PGPUs in the
group.

Signed-off-by: John Else <john.else@citrix.com>
Loosen restriction on PGPU.add_enabled_VGPU_types

Allow adding enabled VGPU types even if there are running VGPUs on the
PGPU.

Signed-off-by: John Else <john.else@citrix.com>
Loosen restriction on PGPU.remove_enabled_VGPU_types

Allow removing enabled VGPU types from a PGPU if there are no running
VGPUs of that type.

Signed-off-by: John Else <john.else@citrix.com>
Add CLI support for PGPU.enabled_VGPU_types

Signed-off-by: John Else <john.else@citrix.com>