objectcache: Support key versioning in WANObjectCache
- getWithSetCallback() takes a 'version' parameter.
- If the value at a key has a different version, then getWithSetCallback() will automatically use a separate key. Which value "wins" the main key does not matter.
- Purges are handled by using the main key as a sort of check key (with no hold-off). Note that this key is always purged on delete().
- Changed stash keys to track the same info as other keys both for consistency and because this change needs the generation timestamp. Renamed the stash prefix to avoid corrupt results with Het Deploy.
- This is useful for things like the User class that use versioning and have cross-wiki key access and purges. Currently, bumps to version must be deployed to all wikis at once, which this aims to avoid.