Higher-level functions

Execute a separate thread of IO for each element of a list, and
collect results.

The analogy to parMap is misleading. The concurrent execution
of these actions is non-deterministic and can affect results.
However, parMapIO is expected to be most useful for actions
which do not interact.