This gives us the ability to separate things we need for the Recipient
class from things we only need for storage syncing.
Not only does this simplify the storage service model building code
(i.e. we no longer need to pass around a set of archived recipients),
but it also eliminates a join on the Identity table for building regular
recipients, which should help perf.
- When doing the intersection, ignore keys that have type mismatches (same storageId, different types)
- If we detect that scenario, schedule a force push to happen afterwards
- Also schedule a force push afterwards if we detect that there's keys in the manifest that don't have any storage item on the service
You can now have a PIN without having registration lock.
Note: We still need to change the registration flow to allow non-reglock
users to enter their PIN.