[SCHEMA] Client sync API, version 1.

Summary:
 * Modify the Transaction schema, replacing the 'additional_data' field by the
   'public_snapshot' field. When we generate a transaction log entry for an
   object `obj`, use 'public_snapshot' to store the API representation of obj
   at that time. (This lets us easily filter and expose transaction log entries
   in the API).

 * Simplify the code in models/revision.py(delta), removing a cryptic part of
   the original sqlalchemy example code that we weren't actually using.

 * Add API endpoints.

 Known issues:
 * Changes to the 'tags' field for messages may not be correct (this is because
   the tags aren't actually mapped property of the Message object in any way,
   so sqlalchemy can't detect tag changes as a change on the Message object).

Test Plan: Working on it.

Reviewers: kav-ya

Reviewed By: kav-ya

Differential Revision: https://review.inboxapp.com/D175
Redis configuration + setup.
Bootstrap Redis account sync status info.
Update Redis account sync status info on start-up.
Fix state reporting in report_progress() -> Update folder sync status info.
Calc num_local_updated, num_local_deleted.
Redis schema for per-folder sync status info.
Bootstrap per-folder sync status info.
DB schema changes (FolderSync tables) + migration.
Include timestamp in folder sync status info.
Script for Redis server.
Minor fixes.
Basic Flask app.
Retry wrapper as a class rather than fn decorator to avoid having to individually wrap the redis-py fns we need.
Documentation.