[SCHEMA] Fixes T163: Drafts synced from remote can't be updated/sent via API

Summary:
Kill SpoolMessage, the Message table stores the extra info needed for Inbox-created, synced back drafts.

Also fixes a few minor drafts related bugs.

Test Plan: None (regression tested)

Reviewers: emfree

Reviewed By: emfree

Differential Revision: https://review.inboxapp.com/D255
Fixes T185: Column extra_flags cannot be null
Clarify phrasing in API filtering documentation.
Don't copy created_date in migration 066.

Not using that field anymore.
Update test db dump to not include message.created_date.
[SCHEMA] Set executed status on action log entries.

Summary:
This is a prerequisite to running the syncback service as an actual standalone
service: we can stop and restart it and not need to worry about losing actions.

Test Plan: Unit tests updated.

Reviewers: kav-ya

Reviewed By: kav-ya

Differential Revision: https://review.inboxapp.com/D259
[exceptions/NotSupported] Consolidate the NotSupported exception to a single location. Perhaps exceptions should be put in a util library?

Summary: Remove the NotSupported exception from the util.url file to consolidate.

Test Plan: regression

Reviewers: emfree

Reviewed By: emfree

Differential Revision: https://review.inboxapp.com/D262
Fix assorted drafts/sending bugs.

* Keep track in memory of which syncback actions have been scheduled but not
  completed, so that we don't try to schedule them twice.
* Remove `message.is_draft` assertion from inbox.actions.delete_draft. This was
  failing when we sent a message, then tried to delete the draft-that-it-was.
* Return instead of raising an AssertionError if we try to send a message that
  isn't a draft or is already sent.
* Distinguish between creating a draft and syncing it to the backend,
  and creating a draft only to send it immediately (in the /send API).
* When constructing the In-Reply-To and References headers on a message, don't
  the previous message's Message-Id and References headers may be null. In this
  case, gracefully degrade instead of failing with a TypeError.
Fixes T194: IntegrityError (1452) FolderItem.folder_id -> Folder.id Foreign Key Constraint Fails.

Summary:
Here's what I think the issue is:

We create a new Folder (line 118, mailsync.base.create_db_objects()) but do not add it to the session.
The corresponding FolderItems are created in line 680, mailsync.gmail.add_gmail_attrs() with autoflush disabled.
Then in contacts.process_mail.update_contacts(), we call get_contact_objects();
the db_session.query(Contact).filter(…).all() in this function triggers an autoflush and causes
the IntegrityError (1452): foreign key constraint fails for FolderItem.folder_id -> Folder.id because the FolderItems are in the session but the Folder
is not.

To fix this:
Added the Folder to the session in mailsync.base.create_db_objects()

Note:
I am not certain that this is the issue, I could not repro it to test the fix - hence, the request for review.

Test Plan: Sync runs as before.

Reviewers: emfree

Reviewed By: emfree

Differential Revision: https://review.inboxapp.com/D263
Add a script to run the syncback service independently.

We need this if the API is deployed other than via the bin/inbox-api script.
Basic multicore support for SyncService.

We implement super ultra basic multicore support by splitting account
syncs across CPU by (account.id % 4), which does not take into account
system load in any way whatsoever. We can still shard across machines by
changing the recorded hostname.

gipc is required in order to prevent multiprocessing from duplicating
parent greenlets into child processes.

My goal here was to retain deployment+development simplicity, hence
choosing to use Python's multiprocessing library rather than a shell
script wrapper or CLI arguments + multiple supervised services. Despite
some (expected) hurdles, seems to be working out.

In the meantime, we also removed SyncService's dependency on ZeroRPC,
and instead do all account actions by polling for changes to the
database. bin/inbox-sync now simply marks the database and returns
immediately instead of waiting on an RPC call. Nothing should be talking
directly to the mail sync process now.