New "assigned virtio" API for applications

This patch adds a new experimental API, include/osv/virtio-assign.hh,
which an application can use if it wants to directly access a virtio
device that the host gave OSv - such as a virtio network device

Before a virtio device can be assigned to the application, OSv
needs to know not to use it itself. The boot-time option --assign-net
tells OSv *not* to use a virtio-net device given to it by the host
(if any), and instead assign it to the guest.

The application can then use osv::assigned_virtio::get() to get access
to this device (see include/osv/virtio-assign.hh for the full API),
and properly set it up and use it.

Signed-off-by: Nadav Har'El <nyh@cloudius-systems.com>
Signed-off-by: Avi Kivity <avi@cloudius-systems.com>