Don't poll for retransmission
Outgoing sync sessions poll the database periodically for messages that have reached their send times and can be sent or offered again. This requires a thread to wake up periodically for each open session, even when there's nothing to send.
The sync layer should keep track of the earliest send time of any message in the DB, and either broadcast an event when the send time is reached or provide a method that blocks until the earliest send time is reached.
Related to #44.