Concurrency refactored to Async (from forkIO)

Reasons: 1. nicer handling, 2. re-throwing exceptions