Factor MessageTracker out of BdfIncomingMessageHook
The branch moves the MessageTracker implementation from BdfIncomingMessageHook to a separate class. This will allow the private group invitation client to track messages from classes other than the one that implements the delivery hook.
I've also fixed a couple of bugs, removed some redundant code from the validation manager, and added null-safety annotations (which is how I noticed the bugs).
See merge request !405
Add visibility and OPTIONS button to private group join notices


Closes#732
See merge request !408
Add support for revealing contacts to the PrivateGroupManager
This also adds three integration tests and improves some small details here and there in the private group client.
Prerequisite for #732.
See merge request !396
Encode transport properties more compactly in QR codes
The [original BQP spec](https://code.briarproject.org/akwizgran/briar/wikis/BQP) described a compact encoding for transport properties, with the goal of making the QR code as small as possible. At some point during the implementation, I asked @str4d to use TransportIds and TransportProperties instead, as described in the [current spec](https://code.briarproject.org/akwizgran/briar-spec/blob/master/protocols/BQP.md). That was a mistake.
Using the original format reduces the payload from 60 to 34 bytes (43% smaller) for Bluetooth only, and from 96 to 49 bytes (49% smaller) for Bluetooth and LAN. This makes it easier to scan codes from low-resolution screens using fixed-focus and/or low-resolution cameras. Using this branch I can exchange codes between the Sony Xperia Tipo (320x480 screen, fixed focus, 640x480 preview size) and the Huawei Ascend Y300 (480x800 screen, infinity focus, 1280x720 preview size).
This also removes an obstacle to implementing #558, as TransportIds are no longer included in QR codes.
Closes#346.
See merge request !394
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
Remove forum content type and change bodies to string
Also removes support for anonymous forum posts.
This MR depends on !360.
Closes#698, #681
See merge request !370