libxl: ocaml: event management

This patch add the facilities needed to interact with the event system
in libxl. This is useful, for instance, for getting a callback when a
domains dies, as well as to use the asyncronous versions of some of libxl's
calls.

The functions dealing with timeouts are still TBD.

Signed-off-by: Rob Hoes <rob.hoes@citrix.com>
libxl: ocaml: allow device operations to be called asynchronously

Signed-off-by: Rob Hoes <rob.hoes@citrix.com>
libxl: ocaml: add NIC helper functions

Signed-off-by: Rob Hoes <rob.hoes@citrix.com>
libxl: ocaml: add PCI device helper functions

Signed-off-by: Rob Hoes <rob.hoes@citrix.com>
libxl: ocaml: add disk and cdrom helper functions

Signed-off-by: Rob Hoes <rob.hoes@citrix.com>
libxl: ocaml: add VM lifecycle operations

Signed-off-by: Rob Hoes <rob.hoes@citrix.com>
libxl: ocaml: provide default records for libxl types

Libxl functions such as libxl_domain_create_new take large structs
of configuration parameters. Often, we would like to use the default
values for many of these parameters.

This commit makes OCaml records of defaults available for all libxl
struct and keyed-union types, which can be used as a base to construct
your own records, and to selectively override parameters where needed.

For example, a Domain_create_info record can now be created as follows:

let c_info = Xenlight.Domain_create_info.({ default with
	ty = Xenlight.DOMAIN_TYPE_PV;
	name = Some vm_name;
	uuid = vm_uuid;
}) in

Signed-off-by: Rob Hoes <rob.hoes@citrix.com>