[SCHEMA] Store raw remote contact data.

Summary:
Right now we're just keeping a few fields in the contacts schema. By keeping
the entirety of the data we get from the remote provider, we can revise the
schema without resyncing.

Test Plan: Behavior manually verified for Google contact sync.

Reviewers: mg

Reviewed By: mg

Differential Revision: https://review.inboxapp.com/D93
Implement a uid/thread-polling helper for IMAP/Gmail initial sync.

Summary:
In the case that a user has e.g. a very large inbox, our current design has the
shortcoming that, during the initial sync, it won't continue to download new
messages. This is untenable for the user experience, so we're solving it by
having a parallel greenlet during this time that keeps checking for new
UIDs/threads and adding them to the top of the initial sync uid/thread download
stack. This thread also detects message deletions.

By doing this, we have to get rid of the "chunked download" feature...  if we
batch download messages in groups, we'll introduce a delay with how fast we
download new UIDs. It's not clear to me that batching actually wins us that
much speed anyway.

We use IDLE to detect new messages to add to the queue, which is super
fast.

Test Plan: ./runtests + a bunch of manual testing that has me thinking real hard about how to do better automatic testing.

Reviewers: mg

CC: kav-ya

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