Prevent concurrent reconciliation
Praefect's reconciler might run concurrently on multiple Praefect nodes. It's using the default isolation level of read committed. Due to this, none of the concurrent transactions will see the jobs queued by other transactions. The queries will see the same state and schedule the same jobs. To fix this, this commit introduces a transaction scoped advisory lock that the reconciliation queries attempt to acquire. If they fail to acquire the lock, they won't schedule any jobs. This prevents them from scheduling duplicate jobs.