Make promotions more asynchronous

Instead of doing a cond_broadcast to make them apply immediately,
we defer them until the next insertion/eviction phase.

This means the bg_thread can sleep a lot more, reducing lock
contention and lowering the cost of a cache hit.