Use async/await in the Subscription.

Small change to take advantage of async/await in the Subscription class. Readability is drastically improved (that's why so much code can be deleted).

New tests were added to verify that the behavior doesn't change untintentionally.