CA-115034: Sort PGPUs for VGPU placement with lock

For host-level breadth-first allocation of VGPUs to PGPUs, we were sorting the
PGPUs available by the most capacity and then taking the lock to allocate the
VGPU to the most 'optimal' PGPU.

During bootstorm, the list could be sorted on all hosts before any is
allocated, leading to them all being allocated to the same PGPU (i.e. not
honouring the breadth-first allocation-algorithm field).

The sorting of the PGPUs is now done in the same critical region as the
allocation.

Signed-off-by: Si Beaumont <simon.beaumont@citrix.com>
Merge pull request #1553 from simonjbeaumont/ca-115034

CA-115034: Sort PGPUs for VGPU placement with lock
Re-use the dev type in device.mli

Plus some minor whitespace fixes

Signed-off-by: John Else <john.else@citrix.com>
CP-6968: Add mechanism for binding PCI devices to the NVIDIA drivers

Signed-off-by: John Else <john.else@citrix.com>
CP-6968: Bind GPUs to the NVIDIA driver when required

When creating a vGPU, make sure the target physical GPU is bound to the
NVIDIA driver first.

Signed-off-by: John Else <john.else@citrix.com>
Add gpumon restart code

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