Fix grant mapping (needed to map memory from other VMs)

We were previously allocating an Io_page.t which is a bigarray
wrapping a block of local memory managed with memalign() and free().
When we mapped some foreign memory over this page and then unmapped
it, we would leave a 'hole' in the address space triggering a
fault when the page was re-used.

We now allocate unpopulated virtual address space
(Io_page.get_unmanaged for now) wrapped with a bigarray without
the BA_MANAGED flag set so that the finaliser doesn't do anything
to it. We can now safely map in foreign memory and unmap it again.

Secondly, the grant_table header which claims that the unmap
hypercall only needs the grant reference and not the memory address
appears to be lying. So we track the mapping from grant reference
to memory address.

With these changes, mirage domU <-> mirage domU block performance
exceeds 1GiB/sec, without bothering even to batch map, unmap grants.

Signed-off-by: David Scott <dave.scott@eu.citrix.com>