Basic exception hardening, ensuring TimerTasks don't stall

Other than a rename of a misspelled method, this just wraps DB calls done within TimerTasks in a retry block & a catch of `NonFatal` exceptions to ensure TimerTasks don't stall. We've been seeing this in logs occasionally:
```
Exception in thread "Timer-0" java.sql.SQLException: database is locked
        at org.sqlite.DB.throwex(DB.java:370)
        at org.sqlite.DB.exec(DB.java:76)
        at org.sqlite.Conn.commit(Conn.java:343)
        at scala.slick.jdbc.JdbcBackend$BaseSession.withTransaction(JdbcBackend.scala:333)
        at scala.slick.driver.JdbcInvokerComponent$BaseInsertInvoker.internalInsertAll(JdbcInvokerComponent.scala
```

So this'll catch it and continue. It's better than silently halting data collection.
nice!

this seem to assume that `fn` has no side effects or at least an atomic side effect. However, you use it for DB calls, can you make sure that they are atomic side effects? 
In particular, a quick check seems to show that `writeToDb` runs a number of `insertAll`, maybe these should be wrapped in a transaction so that if one fails none is executed and we can repeat the call without issues.