Allow Gmail inbox and All Mail initial syncs to proceed in parallel.

Summary:
This is, for now, the most straightforward way for us to get changes to mail
that's not in the inbox while the inbox initial sync is ongoing.

Main changes:
* We do thread expansion in both the All Mail and inbox syncs.
* Thread downloads are serialized via the thread_download_lock, so that we
  don't end up trying to download the same thread twice concurrently. We might
  not *technically* have to do this, but it's definitely easier to reason
  about.

Arguably a better approach would be to have one greenlet responsible for
downloading, one for checking changes on the inbox, and one for checking
changes on All Mail, instead of having two download threads. But that's a
refactor for another day.

Associated changes:
 * Don't cache g_metadata on disk. Gnarly stuff can happen with the
   highestmodseq update, in which you're syncing, your change poller greenlet
   detects a changed highestmodseq, so you get the uids, put them on the
   download queue and update your saved highestmodseq. Then you kill the
   process. Now when you restart, you have the new highestmodseq, but not the
   uids that were dropped. So don't realize that you should actually update the
   cache, and you just lost those uids forever.

Test Plan:
Um, well, it seems to work. It definitely is correctly syncing
messages that were sent via the Inbox API (so appear in All Mail in Gmail, but
not in the inbox). I'll add a system test for this behavior.

Reviewers: spang

Differential Revision: https://review.inboxapp.com/D550