Implement LRU condition slot eviction policy
The current policy for condition slot (re)allocation is to flush and repurpose the first unused condition slot that we find in the ConditionStore's internal array. This means that the ConditionStore can drop unused condition slots too eagerly, and thus cause some condition re-load and re-computation, even when additional storage is available further down the slot array.
Instead, we should use a more reasonable cache replacement policy which tracks the "age" of condition slots and always discards the "oldest" unused one. LRU (Least Recently Used) is a classic algorithm for this with very modest requirements (one "age" counter per condition slot), so it would be my first choice.