Both QEMU and libxl have the same code for tracking auto-allocated
VNC ports. Move this code out into src/util/virportallocator.[c,h].
While doing this turn it into a virObjectLockable so that it becomes
a ref-counted object with self-contained locking. This means it no
longer needs to be protected by the QEMU/libxl global driver locks.
As part of this series the virObject APIs are enhanced to allow
arbitrarily deep inheritance (instead of fixed 1 level), and a
new virObjectLockable base class is introduced which extends
virObject to provide a mutex. This is a very common need so many
existing classes are updated to use it.