Mark private messages read properly
Depends on !386.
This branch uses the same approach as forums to mark messages read, i.e. each message is marked read when it becomes visible, rather than marking all messages read in a batch when the activity finishes. This fixes two problems: messages not being marked read when isFinishing() is false, for example when leaving the activity via the home button, and a race condition between updating and loading the group count when leaving the activity, resulting in a stale unread message count in the contact list.
Closes#196.
See merge request !388
Create GroupDissolvedEvent and react to it
This MR also makes the private group list react to incoming group invitations (once they are implemented).


Closes#736, #737
See merge request !392
Return to group after not inviting new members
This MR also closes the keyboard when returning from the message fragment.
Closes#735
See merge request !389
Fixed asynchronous Activity leaks in Fragments
If a Fragment has been detached its `getActivity()` method will return null, providing numerous crash possibilities within the app.
My approach to fixing this is to make Fragments use their own `runOnUiThreadUnlessDestroyed` method, which also checks if the Fragment has been detached before running the Runnable
Closes#714
See merge request !387
Use contact ID rather than messaging group ID to identify conversation
We originally used the private messaging group ID to identify the private conversation, but now that the conversation includes messages from multiple clients it's more appropriate to use the contact ID.
This refactoring isn't urgent - I've had the branch lying around for a while, but I'm putting it up for review because #734 will touch some of the same code.
See merge request !386
Add unit tests for KeyManagerImpl
This also creates a `TransportKeyManager` interface and a factory for that to be able to test things separately.
Closes#205
See merge request !380
Let only the creator invite new members to private groups
A little bug I noticed when reviewing the implementation of the invitation protocol.
See merge request !383
Improve QR code workflow slightly
* Improve wording so contacts know they need meet up to scan
and scan each other's codes
* Use consistent progress bar styles
Closes#348
See merge request !381
Implement UX for viewing the membership of a private group
This MR is the second and last MR to address #678. The first part is in !377.

Closes#678
See merge request !364