Fixes a production event-loop deadlock: LoopAgnosticLock.aenter blocked the loop thread on a synchronous acquire, so a coroutine acquiring the lock while another held it across an await (e.g. vector_store.index awaiting the embedding HTTP call) froze the whole backend. Acquire is now non-blocking to the loop (fast try, then worker-thread wait on contention). Regression test included; 3445 unit tests pass.