Uses generators and promises to write nice, clean async code