For APNS, optional alert and separate extra data.

This updates the APNS handlers to make the alert optional. This is needed for silent notifications for iOS.
It also moves the 'extra' data out of the `aps` attribute in the JSON which is what's recommended in the APNS docs.