The bits in here (other than the __notify stuff) seems more hacky than I would like.  I've had some new ideas and I propose we do the following:

* Have MailUniverse have a state variable that indicates its mode / why the universe thinks it exists at all.  For example, mode might be either 'cron' or 'interactive'.  This should cover our future use-cases of retrying background send (still 'cron') and web activity has us displaying just an inline compose widget (still 'interactive').

* For now, have the universe start up in 'cron' mode, have the API tell the universe to upgrade to 'interactive' mode.  Provide no downgrade support.

* Lose _cronSyncState and the logic that's supporting it.  Have _queueDeferredOps do the timer reschedule thing if universe.mode === 'cron'.  (or !== 'interactive')

* Refactor ImapAccount.saveAccountState into accountmixins.js.  activesync/account has the same exact logic except for :squib's love of Iterator idioms, so we can just nuke the ActiveSync implementation.

* Create another method in accountmixins like runAfterSaves that works like FolderStorage's runAfterDeferredCalls.  If there is a save in progress, queue up calls, otherwise invoke immediately.  Have saveAccountState set a flag when it starts and clears it in the stateSaved function.  After having it clear the flag, have it run any pending calls from that.

* lose onCronSyncStop with its _cronSyncResults and its deeply sketchy interaction with _serverOpCompleted, and lose its friend _onAccountSaveForSync.  Have syncAccount use runAfterSaves and only call the doneCallback once that has completed.  Then have CronSync._notifySyncDone just call __notifyStoppedCronSync directly with its results.