Reset the timer based on storage changes

Add a channel to storage that emits the next expiry time on changes to
storage. This allows the server to wait for entries to be committed
before changing the time, and properly sets the timer if we restart the
whole cluster.

closes #61