Big refactor: extension factories now return a single flat object ({...exports, whenReady?, destroy?}) and a new defineExtension() normalizer guarantees consistent whenReady + destroy handling. This improves extension ergonomics and fixes a real bug where sqlite cleanup was being silently dropped—users should see more reliable teardown and a cleaner API surface.