Return actual deltas in the streaming API; consolidate code.

Summary:
Instead of sending basically just a ping, `/delta/streaming` now returns actual
change responses, in the same format as the existing `/delta` endpoint.

Concretely, this means that response chunks look something like this (formatted
for clarity):
```
{
    "cursor": "4ya4oyxo7rurxamyt9brfju5b",
    "object": "thread",
    "event": "update",
    "id": "71ormxuivtg52p141tpgjk3vi",
    "attributes": {
        "namespace_id": "f3b0j663wmm2bluq77uc4db9m",
        "tags": [{"name": "drafts", "id": "drafts"},
                 {"name": "starred", "id": "starred"}],
        "last_message_timestamp": 1414778436,
        "object": "thread",
        "message_ids": [],
        "snippet": "",
        "participants": [],
        "draft_ids": ["diu1tytx7p9wnx64hdbxsypqe"],
        "first_message_timestamp": 1414778436,
        "id": "71ormxuivtg52p141tpgjk3vi",
        "subject": "Hello World!"
    }
}
```
The "cursor" value can be used to fetch subsequent changes if the client is
disconnected. As a client, you can keep track of the cursor for the latest
event you've processed, and query
`/n/<namespace_id>/delta/streaming?cursor=<cursor>` to get all changes starting
from that point and onwards.

To this end, consolidate logic for the `/delta` and `/delta/streaming`
endpoints, and update docstrings, etc.

Test Plan: Unit tests added/updated.

Reviewers: spang, kav-ya

Reviewed By: kav-ya

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