Provide a common API for Async implementations

We allow for importing either Async or one of the implementations,
which can be done quite transparently except that using the 'top level'
API means you've got to spawn a little differently.
improve/tidy documentation
get rid of unused pragmas
tidy/refactor API, implement common functions directly
typo
add some utilities to the AsyncSTM implementation c/o (original) async
provide waitAnyCancel for AsyncChan
documentation and cosmetic changes
Merge branch 'unified-async'
Provide a unified Async API

Only a subset of the operations supported by the two implementations can
be provided in a generic fashion and no support is provided for mixing
handles of different types.