* Allow using a transaction for checking APNS token
* Add APNSRotationStore
* add APNSRotationStoreTest
* Rotate APNS tokens in SyncPushTokensJob
* Mark NSE as having processed messages for token rotation
* Check for APNS token rotations after flushing incoming message queue
* pr comments
* Simplify APNS rotation conditions: we mark APNS as working when getting a push in either the NSE or the main app, and rotate if we missed a message since then.
* Mark APNS tokens as working if we ever get a push. Don't rotate known-good tokens.
* Added logging
* add remote flags to control behavior
* pr comments
* fix bad merge
* invert kill switch
* PR nit comments
* Avoid write transactions on the SyncPushTokensJob hot path
* Initial PR feedback, more to come
* Change of strategy: rotate if we have new messages to process on app startup
* PR comments
* use null for calltype column on incoming message rows