CP-5597: Fix initial creation of GPU groups for PGPUs

PGPU.set_GPU_group was checking that the source group wasn't left with in a bad
state (i.e. with VGPUs and no PGPUs) but in the case where the group is first
created to put a newly found PGPU in the 'source group' for the newly
discovered PGPU is NULL reference. So we only look for this condition to be met
when a PGPU is being moved between groups and not initially assigned a group.

Signed-off-by: Si Beaumont <simon.beaumont@citrix.com>
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>