feat: deterministic lazy extension loading, lex noun system, reactive tags widget
- Replace setImmediate fire-and-hope with hasSubscriber verification in handleLazyExtensionReady
- Add message buffering to lazy command stubs and event interceptors (latest wins, exactly-once replay)
- Add 10s safety timeout to loadLazyExtension to prevent callback accumulation
- Add hasSubscriber() with excludePrefix to pubsub for stub-aware verification
- Convert lex from declarative to lazy extension with noun system (lex/new lex/list lex)
- Remove 176+ dynamic lex command registrations, replace with single noun query/create
- Make tags page widget update reactively on tag:item-added/removed events
- Add pubsub and lazy-loading unit tests (24 tests)
- Add Playwright test for dynamic tags widget updates