Clean up on destroy/cancel properly

Rather than use Lwt.cancel, every time we block we use 'pick' to also
wait on a shutdown signal. Memory is unmapped and eventchannel unbound
by a backgroup thread which joins with the 2 server threads, to make
sure we release resources after we have stopped using them.

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