Upgrade to latest Android gradle plugin

// FREEBIE
Closes #1660
Add date to saved media filenames

Fixes #1689
Closes #1693
Add number of messages to the notification number attribute

Although not used by stock Android, many custom ROM's (and possibly OEM
versions?) have a setting to display the "number" count of a notification
overlayed on the status bar icon. Add support for this.

Closes #1637
Break core ratchet out into libaxolotol.

1) Break the core cryptography functions out into libaxolotol.

2) The objective for this code is a Java library that isn't
   dependent on any Android functions.  However, while the
   code has been separated from any Android functionality,
   it is still an 'android library project' because of the
   JNI.
Reorganize session store load/store operations.
Collapse KeyExchangeMessage and KeyExchangeProcessor interfaces.
Move session construction and KeyExchangeMessage into libaxolotl.

1) Add plain two-way key exchange support libaxolotl by moving
   all the KeyExchangeMessage code there.

2) Move the bulk of KeyExchangeProcessor code to libaxolotl
   for setting up sessions based on retrieved prekeys, received
   prekeybundles, or exchanged key exchange messages.
SessionBuilder improvements, more extensive SessionBuilder tests.
Javadocs, and some minor refactoring.
Collapse SessionRecord, SessionState, and PreKeyRecord interfaces.
Add basic README.
Update README
Add "last resort" PreKey generation to KeyHelper.
Move identity key verification into libaxolotol.  With tests.
Add serialization helpers for IdentityKeyPair.
Make helper static.
Better FS Locking.
Add ed25519
Add first cut of protocol v3 support.

1) Use the new /v2/keys API for storing/retrieving prekey bundles.

2) For sessions built with PreKeyBundle and PreKeyWhisperMessage,
   use a v3 ratcheting session when available.
Collapse RatchetingSessionV2 and RatchetingSessionV3.