Implement delivery receipts.

1) Support a "receipt" push message type.

2) Identify messages by timestamp.

3) Introduce a JobManager to handle the queue for network
   dependent jobs.
this is not working for group messages, as the "group numbers" lets `canonicalizeNumber` throw up and
the "insert-address-token" number also is not well formed ;)

![unbenannt](https://cloud.githubusercontent.com/assets/5326916/3787159/4432b412-1a04-11e4-9d27-4572ab7b3275.png)

![unbenannt](https://cloud.githubusercontent.com/assets/5326916/3787163/958bbdea-1a04-11e4-85a2-5ee54358b267.png)

sender's log (group with 2 members):
```
W/PushServiceSocket(18845): Push service URL: https://textsecure-service.whispersystems.org
W/PushServiceSocket(18845): Opening URL: https://textsecure-service.whispersystems.org/v1/messages/+canttellyou
E/SpannableStringBuilder(18845): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
E/SpannableStringBuilder(18845): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
W/PushServiceSocket(18845): PUT  --  {"destination":"+canttellyou","messages":[{"body":"IgohBWk44e9KfUAYFJvPON28rwqXNBi2a6B+K38OGSd2P2k/EAEYASIkskRhVJD5SU5eXaCZAYTaBuARE2w4cYlCSoPUHqgvX8RtjSSD6A267GZ+LcE\u003d","destinationDeviceId":1,"destinationRegistrationId":14048,"type":1}],"timestamp":1406955597000}
W/SystemStateListener(18845): java.lang.IllegalArgumentException: Receiver not registered: org.thoughtcrime.securesms.service.SystemStateListener$ConnectivityListener@4286a3a8
W/SystemStateListener(18845): 	at android.app.LoadedApk.forgetReceiverDispatcher(LoadedApk.java:665)
W/SystemStateListener(18845): 	at android.app.ContextImpl.unregisterReceiver(ContextImpl.java:1517)
W/SystemStateListener(18845): 	at android.content.ContextWrapper.unregisterReceiver(ContextWrapper.java:489)
W/SystemStateListener(18845): 	at org.thoughtcrime.securesms.service.SystemStateListener.unregisterForConnectivityChange(SystemStateListener.java:46)
W/SystemStateListener(18845): 	at org.thoughtcrime.securesms.service.MmsSender.handleSendMms(MmsSender.java:87)
W/SystemStateListener(18845): 	at org.thoughtcrime.securesms.service.MmsSender.process(MmsSender.java:60)
W/SystemStateListener(18845): 	at org.thoughtcrime.securesms.service.SendReceiveService$SendReceiveWorkItem.run(SendReceiveService.java:275)
W/SystemStateListener(18845): 	at org.thoughtcrime.securesms.util.WorkerThread.run(WorkerThread.java:46)
W/GcmBroadcastReceiver(18845): GCM message...
W/IncomingEncryptedPushMessage(18845): Our MAC: 5e 49 f6 43 71 cf ae 95 ad 18 
W/IncomingEncryptedPushMessage(18845): Thr MAC: 5e 49 f6 43 71 cf ae 95 ad 18 
W/PushReceiver(18845): Received receipt: (XXXXX, 1406955597000)
W/MmsDatabase(18845): org.whispersystems.textsecure.util.InvalidNumberException: No valid characters found.
W/MmsDatabase(18845): 	at org.whispersystems.textsecure.util.PhoneNumberFormatter.formatNumber(PhoneNumberFormatter.java:64)
W/MmsDatabase(18845): 	at org.thoughtcrime.securesms.util.Util.canonicalizeNumber(Util.java:134)
W/MmsDatabase(18845): 	at org.thoughtcrime.securesms.database.MmsDatabase.incrementDeliveryReceiptCount(MmsDatabase.java:186)
W/MmsDatabase(18845): 	at org.thoughtcrime.securesms.database.MmsSmsDatabase.incrementDeliveryReceiptCount(MmsSmsDatabase.java:109)
W/MmsDatabase(18845): 	at org.thoughtcrime.securesms.service.PushReceiver.handleReceivedReceipt(PushReceiver.java:185)
W/MmsDatabase(18845): 	at org.thoughtcrime.securesms.service.PushReceiver.handleMessage(PushReceiver.java:95)
W/MmsDatabase(18845): 	at org.thoughtcrime.securesms.service.PushReceiver.process(PushReceiver.java:63)
W/MmsDatabase(18845): 	at org.thoughtcrime.securesms.service.SendReceiveService$SendReceiveWorkItem.run(SendReceiveService.java:278)
W/MmsDatabase(18845): 	at org.thoughtcrime.securesms.util.WorkerThread.run(WorkerThread.java:46)
W/PhoneNumberFormatter(18845): Got local CC: DE
W/PhoneNumberFormatter(18845): Error type: TOO_LONG. The string supplied is too long to be a phone number.
W/PhoneNumberFormatter(18845): 	at com.google.i18n.phonenumbers.PhoneNumberUtil.parseHelper(PhoneNumberUtil.java:2982)
W/PhoneNumberFormatter(18845): 	at com.google.i18n.phonenumbers.PhoneNumberUtil.parse(PhoneNumberUtil.java:2775)
W/PhoneNumberFormatter(18845): 	at com.google.i18n.phonenumbers.PhoneNumberUtil.parse(PhoneNumberUtil.java:2765)
W/PhoneNumberFormatter(18845): 	at org.whispersystems.textsecure.util.PhoneNumberFormatter.formatNumber(PhoneNumberFormatter.java:77)
W/PhoneNumberFormatter(18845): 	at org.thoughtcrime.securesms.util.Util.canonicalizeNumber(Util.java:134)
W/PhoneNumberFormatter(18845): 	at org.thoughtcrime.securesms.database.MmsDatabase.incrementDeliveryReceiptCount(MmsDatabase.java:186)
W/PhoneNumberFormatter(18845): 	at org.thoughtcrime.securesms.database.MmsSmsDatabase.incrementDeliveryReceiptCount(MmsSmsDatabase.java:109)
W/PhoneNumberFormatter(18845): 	at org.thoughtcrime.securesms.service.PushReceiver.handleReceivedReceipt(PushReceiver.java:185)
W/PhoneNumberFormatter(18845): 	at org.thoughtcrime.securesms.service.PushReceiver.handleMessage(PushReceiver.java:95)
W/PhoneNumberFormatter(18845): 	at org.thoughtcrime.securesms.service.PushReceiver.process(PushReceiver.java:63)
W/PhoneNumberFormatter(18845): 	at org.thoughtcrime.securesms.service.SendReceiveService$SendReceiveWorkItem.run(SendReceiveService.java:278)
W/PhoneNumberFormatter(18845): 	at org.thoughtcrime.securesms.util.WorkerThread.run(WorkerThread.java:46)
I/Timeline(18845): Timeline: Activity_launch_request id:org.thoughtcrime.securesms time:24870541
```