Remove the remaining races, new and old.

Also, resolve a few other TODOs.

Change-Id: Icb39b5a5e8ca22ebcb48771cd8951c5d9e112691

@juliusv 
Can we tolerate holding the lock here? If the ingester channel (which sends samples to the storage) backlogs (as we've seen recently), the lock could potentially be held for a long time, and it won't be possible to view the status page. To not make the code more complicated, maybe we could just add a `defer` before this line and the corresponding other one below?