feat: PluginPage iframe bridge + CallPluginFunction binding
- PluginPage.svelte: bidirectional postMessage bridge with iframe
- Handles: ready, get-events, create-event, update-event, delete-event
- Queues messages until iframe is ready
- Exports handleDrop() for drag-and-drop from parent
- CallPluginFunction binding: calls arbitrary Lua functions on active plugins
- Supports dotted paths: 'calendar.create_event' → _G.calendar.create_event
- JSON params → Lua table conversion
- LuaVM: added DoString(), LState(), VM() public methods
- Plugin: added VM() getter for external access