Add a loss-less event channel interface to Activations

Activations.wait is hard to use because if the calling thread
blocks between calls, events which arrive when the Lwt_sequence
is empty are silently dropped.

So we add a new interface which is easier to use and which
permits blocking between calls:

  val program_start: event
  val after: Evtchn.t -> event -> event Lwt.t

Applications should keep calling [after] passing in the last
[event] they have seen. The system counts the number of times
each port has been notified and knows when a call to [after]
should not block i.e. when a notification was received after
the last time [after] was called.

We can now remove the spurious wakeup hack from Activations.
This was masking bugs by waking up the device drivers whenever
there was console activity caused by printf.

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