reproducible test case for the setApiKeyAttribute StaleDataException bug

Note: you will need the Charles debugging proxy
Bug reproduction steps:
1) curl -v --proxy http://localhost:8899 -u username:password -X GET http://localhost:8080/test/setAtt
2) in Charles, right-click on the setAtt item in either Structure or Sequence and select Repeat Advanced...; enter e.g. Iterations: 1, Concurrency 5
concurrent ApiKey attributes modifications fix

This is a fix to a long standing bug where we would end up seeing stack traces containing:
org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
In particular, this bug was triggered when an updater would try to update its time bounds (AbstractUpdater.updateTimeBounds()) and multiple threads would try to access a connector's ApiKey at once (when updating multiple ObjectTypes in parallel)
Merge branch 'wip/update-row-count-fix' into hotfix/zombie-threads-fix