Remove the remaining races, new and old.

Also, resolve a few other TODOs.

Change-Id: Icb39b5a5e8ca22ebcb48771cd8951c5d9e112691

@juliusv 
I'm fixing a bug here that I introduced myself.

In general, if you want to use a channel to signal something like "please stop", it is preferred to close the channel instead of sending a "signal token" over the channel. The reason is that a closed channel can be queried for its closed state any number of times (there can be multiple consumers of the "please stop" signal), while the signal token can only be read once.

So I switched from "sending struct{}{}" to "close the channel" in an earlier change.

Now, however, StopScraper() will always return immediately, because closing the channel doesn't have to wait for anything.

To make StopScraper() wait for the real shutdown, we need the new channel.

In this particular case, we could go back to the old approach of sending a signal token. But there are two reasons for doing it the way it is done here:

(1) Consistency: The "close the channel" pattern with a xxxStopping and an xxxStopped chan is used many times in the storage layer.

(2) Should we ever need another goroutine check for the "stopping" state, we can simply do so (the advantage of the "close the channel" pattern). No refactoring or (in lieu of that) weird bugs have to happen.