arm: virtio board support

This commit consists of a bunch of changes which improve our FDT
support and add support for the virtio board type from qemu.

FDT changes:
 * Add a struct for returning memory address/size pairs.
 * Add code to find out how big the address/size properties are.
 * Add code to return data.
 * Use this API in ampintc and virtio.
 * Implement a way to get the interrupt controller of a device.
 * Implement a way to find out the cell size, so that we can
   read the interrupt number.
 * Add API to get interrupt number.
 * Use this API in virtio.

Virtio:
 * Implement basic construct for virtio board virt.
 * Have virt use it's own device attaching mechanism.
 * Iterate through fdt nodes and try to attach all nodes.
 * Add Virtio MMIO driver.
 * Make virt board use virtio drivers and attach to the MMIO driver.
 * Write a small driver for the virtio pl011 uart, based on the
   i.MX6 driver.

ok drahn@
Revise hardlink handling.

Allow the code to handle hardlinks to non-regular files correctly.

Track whether the file content has already been dumped to the snapshot.
Stop relying on tn_dirent_hint, which is not guaranteed to be set at all.
This change also allows us to rely on the behaviour that the file &
content is always before the zero-sized hardlinks to resolve ambiguities
during the streaming read of a snapshot.

with input from and ok pedro@