update Merged Customer Info
Merges device and web CustomerInfo and updates the public CustomerInfo flow.
This method:
Reads the latest device CustomerInfo from storage (built from Google Play receipts)
Reads the latest web CustomerInfo from storage (fetched from backend)
Merges them using priority rules (see CustomerInfo.merge())
Persists the merged result to storage
Updates the public flow so listeners get the latest merged state
When an external purchase controller is present:
Uses CustomerInfo.forExternalPurchaseController() instead of standard merge
This ensures external controller's entitlements are preserved as source of truth
The merge is performed asynchronously on the IO scope to avoid blocking the caller.