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)