hvm: Modify interface to support multiple ioreq server

Add structure to handle ioreq server. It's server which can
handle a range of IO (MMIO and/or PIO) and emulate a PCI.
Each server as its own shared page to receive ioreq. So
we have introduced to HVM PARAM to set/get the first and
the last shared used for ioreq. With it's id, the server
knows which page it must use.

We introduce a new kind a ioreq type IOREQ_TYPE_PCICONFIG
which permit to forward easily PCI config space access.
hvm: Add functions to handle ioreq servers

This patchs add functions to help to :
  - create/destroy server
  - map/unmap IO range to a server
hvm-pci: Handle PCI config space in Xen

Add function to register a bdf with a server.
To handle cf8 -> cff we add an handler with register_portio_handle.
When Xen reveice 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

This patch modifies initialization and the destruction of an hvm
hvm: Modify hvm_op

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

This modify several parts of the IO handle.
Each vcpu now contains 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 by 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 that we have introduce a new function hvm_buffered_io_send_to_server,
which send an IO to a specify 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 patchs permits to allocate more special pages. Indeed, for multiple
ioreq server, we need to have 2 shared pages by server.

xc_hvm_build will take an argument which will indicate the number of
special pages we want to allocate.
xl: Add interface to handle multiple device models

This patch add a structure with contain all informations about
a device model.
xl-qmp: add device model id to qmp function

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

For the support of multiple ioreq server, we add a new option "device_models".
It's an array of device model, for each device model, we need to specify
which pci, IO range (MMIO, PIO) will be allow.

For instance, if we want a QEMU which handle a specify PCI:

name=net, path=/path/to/qemu-wrapper, pci=00:4.0
xl: Launch and destroy all device models

This patch permits to launch and destroy all device models.
For the moment it's a fork of libxl__build_device*