Clean up Introduction Session States
...for introducer when both introducees have been deleted.
It can't be deleted when only one introducee is removed, because then all messages in the private conversation with the other introducee will disappear, because their corresponding session state can't be found anymore.
Closes#372
See merge request !189
Simple metadata queries
Adds support for retrieving metadata that matches all key/value pairs in a query object. This is a minimal version of #222 that can be extended if we need other query capabilities.
See merge request !187
Rotate crash fix
The problem was that two controllers were trying to unbind the Briar service where of course only one was needed.
I did the following
* Restructured the relevant Controllers
* Made a more permanent solution so that the last fragment will always be reloaded on config changes and Activity restarts.
Closes#386
See merge request !183
Add forum avatars to list of available forums

Closes#374
See merge request !182
Forum Avatars
These new forum avatars are using the first letter of the forum and calculate the background color from forum's group ID.
Closes#337

See merge request !178
Start plugins asynchronously
This prevents other services from getting stuck behind the plugin manager while the Tor plugin is starting, which takes several seconds. The plugin manager waits for each plugin to start before stopping it.
I've also added some canaries to plugins and services to ensure instances aren't started more than once.
See merge request !181
Poller refactoring, replace Timer with ScheduledExecutorService
* Replace Timer with ScheduledExecutorService (closes#258)
* Move automatic connection logic from PluginManager to Poller
* Reschedule polling when connections are opened or closed, making the poller more responsive to reductions in the polling interval
See merge request !180
274 code encapsulation
The goal of this branch is to better compartmentalize, structure and simplify the code in the Android module. It does this via the following techniques:
* Extended use of Dagger by introducing a component for Activities that injects, among other things, SharedPreferences and Fragments. The latter makes it possible to mock fragments more easily and letting Dagger automatically handle its injections.
* Decouple Briar API code, from the activities and Fragments, and encapsulate in re-usable Controller classes
* Introduce a UI-thread App event bus that the Helper classes use to communicate with Activities & Fragments.
* Define the testing methods in the briar-android module per Robolectric and Mockito
NOTE! Don't be alarmed if you see the contact introduction message one more time, one of the changes was to purify UI shared preferences from the Briar shared preferences, which now only contain preferences related to the API and it's usage.
closes#274
See merge request !130