feat: wire Widget module into worker message loop
Initialize Widget.set_sender at worker startup so widget view updates
are sent via Worker.post_message. Handle incoming WidgetEvent messages
by routing them through Widget.handle_event. Add WidgetUpdate/WidgetClear
catch-all cases in the OCaml client to suppress non-exhaustive match
warnings.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>