Shorten keep alive interval. Closes #97
Incoming request bodies are no longer base64

Since the socket is not a text-based transport, there's no need to
base64-encode the IncomingPushMessageSignal.
Keepalive endpoint
Update name and repository in package.json
Refactor background page and replayable errors

Ground work for handling identity key changes and delivery receipts.
Render identity key errors

Thanks to some refactoring of replayable errors and background page,
identity key change errors now display in the message view
Background refactor

break out events
move first install stuff to top
inline some things that dont need an event
move delivery receipt handling
wait for save before decrypting
remove dead code

Dont use runtime events when not needed,
use a partial compound index query,
use a shared background messagecollection
Catch identity key errors and save them on the model
Do something with delivery receipts
Modify active flag

Use 1 for active instead of true.

Unset active instead of setting to false. This will make it disappear
from the inbox index.
IndexedDB adapter mods

Support options.conditions for for compound indices and Add support for
`order: 'DESC'` condition. Allow specifying index name and cursor bounds
(lower, upper, or only) explicitly.
DB/Index Redux

This change removes the timestamp field from messages and conversations
in favor of multiple semantically named timestamp fields: sent_at,
received_at on messages; active_at on conversations. This requires/lets
us rethink and improve our indexing scheme thusly:

The inbox index on conversations will order entries by the
conversation.active_at property, which should only appear on
conversations destined for the inbox.

The receipt index will use the message.sent_at property, for effecient
lookup of outgoing messages by timestamp, for use in processing delivery
receipts.

The group index on conversation.members is multi-entry, meaning that
looking up any phone number in this index will efficiently yield all
groups the number belongs to.

The conversation index lets us scan messages in a single conversation,
in the order they were received (or the reverse order). It is a compound
index on [conversationId, received_at].
Delivery receipts

Look up messages by sent_at and filter for those sent to the delivery
receipt's source, or groups that source is in.
Identity key change handling

re-protobuf-ize incoming accepted key changes

Pass message_id to the decryption event handler. This allows
`decryptMessage` use the message's uid in indexedDB to update the
message content once it is successfully decrypted, rather than having
to derive the message id from the IncomingPushMessageSignal.

Using this setup we no longer need the message id to be determined
solely by the properties of IncomingPushMessageSignal. Previously we
passed source, timestamp as id, but now we can revert to using randomly
generated uids