Update 'share' to cope with both styles of low-level interface

In Xen kernel mode we can share existing memory pages.
In Xen userspace on Linux we can only allocate special pre-shared
  buffers.
In Unix with mmap(2) we can only allocate buffers backed by new
  files.

We add the new argument to 'share':

contents = `Zero
  -- this means allocate the buffer (which must be full of zeroes
     otherwise it risks exposing application secret data to other
     domains) and share it.
contents = `Buffer b
  -- this means attempt to share the existing buffer [b], but if
     that's not possible on this platform then allocate a fresh
     buffer and copy [b] into it.

To write applications which can work with both interface styles, they
must call [buf_of_share] to discover the real shared buffer.

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