Part one. Update to run under asyncio. Individual blocks still freeze - that comes in part two.
Part two. Update to run each block without blocking the others.

This works by creating a coroutine for each block, and when a block has
run, signals the main coroutine (i.e. the main function that writes to
sys.stdout) that some part has changed, and everything should be
rerendered.

As an exercise, I've left the requests and mpd portions incomplete -
because they're running as blocking code (i.e. they don't interact with
asyncio properly) they will result in the rendering freezing when they
update.