vchan: remove idea of a shared 'waiter' thread

Threads may call read and write concurrently on the same vchan, and
therefore have to use the same event channel. Rather than replicate the
'single-shot-oops-you-missed-it' semantics of the underlying Xen event
channels, everyone should use the activations mechanism instead, which
tracks the number of times the event channel has been signalled and
guarantees that you'll not miss one and then block forever.

The downside is that we'll probably check for outstanding work one more
time than strictly necessary in the common case, but this is just a
memory load so it's not worth worrying about (I assert)

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