The fix was pretty straightforward except for one interesting caveat:
since we add a new download observer every time we start downloading a
new purchase, we also have to remove it when the download finishes.
Otherwise there will be multiple observers reporting download progress
for the same purchase (i.e. user will see duplicate output)
If we're going to depend on the dispatch_group we should ensure we enter
before it could possibly be exited. In reality it should never happy as
`purchase.perform` does an XPC call but there's no harm in being
cautious.