Merge pull request #127 from 0x64746b/remove_unused_from_roster

Remove unused constants from roster
Merge pull request #126 from 0x64746b/fix_unparametrized_teams_set

Fix unparametrized teams set
Draft initialization of key exchange

Upon join of an invitee, create a Diffie-Hellman key pair and send the public
key to the invitee [dummy].
Add type `CryptoPacket`

Create a packet that holds the generated Diffie-Hellman public key, prepare
infrastructure for parsing new packet type.
Exchange public keys

Send public Diffie-Hellman key via private chat, listen for response and trigger
completion of key exchange.
Generate Diffie-Hellman shared secret

Calculate shared secret from received public and own private key.
Implement parsing of crypto packets

Teach the `TeamMeetExtensionProvider` to parse `CryptoPacket`s.
Add name to `Team`

Pass the team's name in the constructor. This will allow retrieving the name
from a `Team` instance and enable a human readable `toString()` implementation.
Handle crypto packets in `PacketListener`

So far `CryptoPacket`s were handled in a `MessageListener`. This added the
requirement for them to have a body and intermingled them with regular chat
messages.

This commit handles `CryptoPacket`s in a dedicated `PacketListener`. Since this
mechanism is more low level, it requires manual tracking of the `Team` the
transmitted keys are related to.
Make DH parameters 2048 bits

So far the externally generated parameters for the Diffie-Hellman key exchange
were limited to the [artificial 1024 bit limit][0] introduced by Java's JCE
implementation.

This commit introduces 2048 bit parameters generated with `BouncyCastle`.

 [0]: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6521495
Make DH parameters 4096 bits

So far the externally generated parameters for the Diffie-Hellman key exchange
were limited to the [artificial 1024 bit limit][0] introduced by Java's JCE
implementation.

This commit introduces 4096 bit parameters generated with `BouncyCastle`.

NOTE: The generation of large assymetric keys upon accepting a join request may
take 2-3 seconds, so we might want to do this asynchronously rather than in the
`onClick()` handler of the dialog button.

 [0]: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6521495
Refactor `Join Team` Dialog

Extract it into its own class instead of defining it anonymously.
Refactor `FormTeamTask`

 * Rename
 * Simplify return type
Add `JoinTeamTask`

Make joining of teams (which includes expensive generation of asymmetric keys)
asynchronous so the UI stays responsive.
Encrypt and send session key

So far it was not possible to encrypt the session key.

This commit introduces the transformation from the Diffie-Hellman derived shared
secret into a 256 bit AES key, the encryption and consecutive dispatch of the
session key as well as the detection on the invitee end.

NOTE: There's no means yet to transmit the IV, so the invitee won't be able to
decrypt the AES session key.
Decrypt session key

So far it was not possible to decrypt a received session key.

This commit introduces the ability to decrypt an AES encrypted session key.
Add `ToastHelper`

So far it was hard to display a `Toast` from a non-UI thread if
`Activity::runOnUIThread()` wasn't readily available.

This commit introduces a simple helper class that allows to display a toast from
a thread as long as a `Context` is available.
Add feedback during key exchange

So far the user didn't receive any feedback as to what happenend during the
prolonged key exchange period.

This commit introduces status messages that provide information as to the
progress of the operation.