Add storage state guards and transition callbacks.

To ensure that we access tiered storage in the proper way, we have
guards now.
Race Work: Make memory arena locks more coarse.

We can optimize these as needed later.
Code Review: Make double-drain a panic.
Merge pull request #285 from prometheus/fix/storage/states

Add storage state guards and transition callbacks.