Implement the persistent registration model for Phase 21.
Scope:
- Add origin-keyed service worker registration records with script URL, scope URL, lifecycle state, and install/waiting/active slots.
- Implement navigator.serviceWorker.register(), getRegistration(), getRegistrations(), ready, and unregister semantics at the DOM/JS boundary.
- Resolve script and scope URLs, enforce same-origin rules, and reject unsupported schemes.
- Add byte-for-byte script update detection plumbing, even if worker execution remains stubbed until later issues.
- Persist registrations using only std filesystem APIs in the existing browser storage area.
Acceptance criteria:
- Unit tests cover scope normalization, longest-prefix scope matching, same-origin failures, unregister, and persistence reload.
- JS-facing tests demonstrate register/getRegistration/getRegistrations/ready behavior with resolved promises or clear errors.
- No external crate dependencies and unsafe remains limited to allowed crates.