hvm-pci: Handle PCI config space in Xen

Add function to register a bdf within a server.
An handler was add to catch (cf8 -> cff) ioport access.
When Xen reveices a PIO for cf8, it's store the value inside the current
vcpu until it receives a PIO for cfc -> cff.
In this case, it checks if the bdf is registered and forge the ioreq
that will be forward to server later.
hvm: Change initialization/destruction of an hvm

Prepare/Release structure for multiple ioreq servers.
hvm: Modify hvm_op

This patch removes useless hvm_param due to structure modification
and bind new hypercalls to handle ioreq servers and PCI.
hvm-io: IO refactoring with ioreq server

Modification of several parts of the IO handle.
Each vcpu now contain a pointer to the current IO shared page.
A default shared page has been created for IO handle by Xen.
Each time that Xen receives an ioreq, it will use the default
shared page and set the right shared page when it's able to
know the server.

Moreover, all IO which are unhandleabled by Xen or by a server
will be directly discard inside Xen.
hvm-io: send invalidate map cache to each registered servers

When an invalidate mapcache cache occurs, Xen need to send and
IOREQ_TYPE_INVALIDATE to each server and wait that all IO is completed.
We introduce a new function hvm_wait_on_io to wait until an IO is completed.
hvm-io: Handle server in buffered IO

As for the normal IO, Xen browses the ranges to find which server
is able to handle the IO.
There is a special case for IOREQ_TYPE_TIMEOFFSET. Indeed,
this IO must be send to all servers.
For this purpose, a new function hvm_buffered_io_send_server was introduced.
It sends an IO to a specific server.
xc: Add the hypercall for multiple servers

This patch add 5 hypercalls to register server, io range and PCI.
xc: Add argument to allocate more special pages

This patch permits to allocate more special pages. Indeed, for multiple
ioreq server, we need to have 2 shared pages by server.
xc: modify save/restore to support multiple device models

    - add save/restore new special pages and remove unused
    - modify save file structure to allow multiple qemu states
xl: Add interface to handle qemu disaggregation

This patch modifies libxl interface for qemu disaggregation.
For the moment, due to some dependencies between devices, we
can't let the user choose which QEMU emulate a device.

Moreoever this patch adds an "id" field to nic interface.
It will be used in config file to specify which QEMU handle
the network card.

A possible disaggregation is:
    - UI: Emulate graphic card, USB, keyboard, mouse, default devices
    (PIIX4, root bridge, ...)
    - IDE: Emulate disk
    - Serial: Emulate serial port
    - Audio: Emulate audio card
    - Net: Emulate one or more network cards, multiple QEMU can emulate
    different card. The emulated card is specified with its nic ID.
xl: add device model id to qmp functions

With the support of multiple device model, the qmp library need to know
which device models is currently used.
xl-parsing: Parse new device_models option

Add new option "device_models". The user can specify the capability of the
QEMU (ui, vifs, ...). This option only works with QEMU upstream (qemu-xen).

For instance:
device_models= [ 'name=all,vifs=nic1', 'name=qvga,ui', 'name=qide,ide' ]

Each device model can also take a path argument which override the default one.
It's usefull for debugging.
xl: support spawn/destroy on multiple device model

Old configuration file is still working with qemu disaggregation.
Before to spawn any QEMU, the toolstack will fill correctly, if needed,
configuration structure.

For the moment, the toolstack spawns device models one by one.
xl: Fix PCI library

Quickly fix for PCI library. For the moment each hotplug PCI are add to
QEMU 0. We need to find a best way to specify which qemu handle the PCI.
xl: implement save/restore for multiple device models

Each device model will be save/restore one by one.