Added CLAsync for asynchronous CL operations.

This prompted a renaming of the old CLAsync type to IOAsync. The new
async support is much more powerful as it is packaged with a
mini-HList implementation that supports waiting on multiple events
that each return different types of values.

Async support has been added to Buffers and Images in the CL monad.