Fixup OutgoingIdentityKeyError handling
Fixup delivery receipts

Uses app-level timestamps for outgoing messages.
Adds timestamp property to the outgoing jsonData.
Triggers a runtime event to notify frontend on delivery receipts.
Renders delivered messages with a 'delivered' class.
Fix undefined proto.source
Fix bug overwriting existing conversation names

On incoming messages for pre-existing conversations, don't update any
attributes unless it's a group update message.
Normalize send-path error handling

Receive and handle an array of errors in both the group and individual
cases.
Added ✓ to delivered messages

Closes #100
Closes #101
Scratch that, reverse it.
Fixed date format
Contact name now overflows into ellipsis
Fixed timestamps and added last message to the gutter
Don't refreshGroups in tryMessageAgain

This was intended to sync the group state of a recently re-installed
client, but is prone to overkill when we have a lot of old stale groups
around. Also this implementation incurs some rate limit errors from the
server.
Fix arguments to sendMessageProto in tryMessageAgain

As ov ccc98d2 sendMessageProto takes a timestamp for the first argument,
in service of app-level delivery receipts.
If we happen to get a group message with no update, use a blank name
Catch and save Bad Mac errors on the incoming message model
Tolerate extra whitespace in the registration code field
Don't require a conversation name

Just display a sensible default in the frontend if it's unset.
For private conversations this should be the phone number, for
groups, the list of numbers.
Simplify pushMessageContent handler slightly

New private conversations have their type set in onMessageReceived. New
group conversations should be handled the same way as normal group
updates. It was pointed out we should never have to handle a group
message without a preceding group update, as those would be rejected by
textsecure.processDecrypted. An exception would be if you delete the
group from indexedDB but not localStorage, but that's not a mode we
should be supporting.

Also in this change I switched to instantiating a new conversation
object on every call to handlePushMessageContent. Originally, I thought
to use the local conversation list as a cache, but it's a bit simpler to
re-read from the database every time for now. Later on we should revisit
and optimize for fewer read/writes per incoming message.