virtio: fix missed notification

In virtio::vring::kick(), we read avail_event (which is written by the host)
in order to see if we need to notify the host about our last write.  However,
the processor may speculate this read, moving it before the avail_idx write
(in virtio::vring::add_buf()), in which case we will see a stale value.

Insert a memory fence in order to ensure we read a fresh value.

The fixes throughput issues in request/repsonse benchmarks, esp. netperf
TCP_RR.

Fixed #383.

Reviewed-by: Dor Laor <dor@cloudius-systems.com>
Reviewed-by: Vlad Zolotarov <vladz@cloudius-systems.com>
Signed-off-by: Avi Kivity <avi@cloudius-systems.com>