[SCHEMA] Refactor several pieces of draft logic.

Summary:
* Make create_and_save_draft() a provider-independent function that just
  directly creates a SpoolMessage with the desired attributes. This eliminates
  duplicated code across repos. Also fixes an issue in which new drafts
  appeared as unread messages.

* Don't copy/fork drafts on conflicting updates. Instead fail with 409 on an
  attempt to post to a draft that has already been updated.

* Eliminate the intermediate DraftThread object. Instead just set
  SpoolMessage.thread_id to reference the draft you're replying to. This fixes
  an issue with the /threads API call, in which we'd create a new draft object
  that contained only the draft. But then both the original thread and
  the newly-created one would be returned by /threads, and both would contain
  the draft public id in their 'drafts' field.

* Modify tests to directly exercise the API for more coverage.

* Fix an argument typo in which we couldn't sync back drafts with attachments.

* Allow tags to be set on draft creation.

Test Plan: Unit tests are in-progress.

Reviewers: kav-ya

Reviewed By: kav-ya

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