Tool webhooks wired up: tool.failure now actually fires + new tool.checked_out / tool.checked_in

tool.failure was declared in the public AsyncAPI spec since the v1 launch but no lib path ever called enqueueWebhookEvent — subscribers got nothing. Wired the emission inside reportToolIssue + BROKEN check-ins so the event fires for both paths. Also added two new event types: tool.checked_out (fires from checkoutTool, payload includes targetUser + linkedAsset) and tool.checked_in (fires from checkinTool, includes the observed condition + newStatus + auto-spawned workOrderId on BROKEN). Same HMAC-SHA256 signing + 5-minute replay window + ABANDONED-after-12h retry behavior as the existing webhooks. All three are best-effort enqueues — a webhook backend hiccup never blocks the check-out itself.