zink: use timeline semaphores and enforce device_lost status
this adds a timeline semaphore fastpath which avoids a bunch of cpu overhead, fixes a longstanding bug with long-term deferral of user fences, and more helpfully pretends to do work after the device has been lost