Fix lifecycle stuff

These are changes to the async bits of the classify pages to avoid unnecessary re-rendering. I'm finding I still need to use promiseToSetState in addition to the ChangeListener and PromiseRenderer components to avoid extra requests and re-renders when e.g. a segment in the URL hash changes.

`promiseToSetState` no longer nulls-out the existing value. Now it just updates when the promise resolves. That makes updates less jarring.

There's also lots of cleanup of leftover store/dispatcher stuff from early development. Probably should have been a separate PR. Sorry.