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