Refactor some execution finalization code for #511

Problem:

DB connectivity issue will cause execution state update to fail, and prevent both the logging stream from being `.close()`d, and fail to properly update state of the execution in the DB.

* Add ExecutionUtilService: non-transactional methods should not require DB
    * finalizing the logging stream can now be done without needing a DB connection
* Update ExecutionJob: introduce retry behavior for finalization methods
    * if the execution state update fails, wait some time and try again up to a maximum number of times
* Add tests

fixes #511