Simplify IMAP sync concurrency; don't sync both Inbox and All Mail for Gmail.

This commit implements the late-night realization that it's totally unnecessary
to have two greenlets trying to concurrently modify the download stack during
initial sync.

Concretely:

* For generic IMAP, we can just periodically interrupt the initial sync and
  recompute the set of uids on the remote, i.e., the contents of the download
  stack. No concurrency is best concurrency. (We now need a separate flags
  refresh poller, but it's pretty lightweight).

* For condstore, the change poller greenlet checks for updates on the remote,
  and if there are any, communicates them to the main downloading greenlet via
  a `changed_uid_channel` (which is really a JoinableQueue, but conceptually
  resembles as a Go-style channel). So all manipulation of the download stack
  happens on one greenlet, removing much of the need for locking and careful
  reasoning.

* For Gmail, no longer sync Inbox and All Mail concurrently. Doing so was super
  complicated and inefficient. Instead, just sync All Mail. (It used to be that
  condstore was super slow on large folders, so we couldn't do this and get new
  Inbox messages in a timely manner. But we were actually just doing condstore
  wrong, so this is no longer a concern.)

* For simplicity, expand threads when syncing Gmail spam and trash. This
  doesn't change the sync behavior much, just makes for less and simpler code.

* Includes a schema migration only to force all Gmail inbox folder syncs to
  stop, because otherwise things might break.