OF-3287: evict per-user group caches for source group members
Ensure cache invalidation also includes members/admins of the group being processed, not only groups returned by shared-group traversal.
Previously, `evictCachedUsersForGroup(...)` could miss users in the source group (especially non-shared groups), leaving stale cache entries. This caused group create/rename/delete and shared-roster target-list changes to not be reflected immediately for affected users.
OF-3288: Unify evicting of paginated and non-paginated group names
Instead of having two methods that should always be called at the same time, have one method, that does both. This is less error-prone, and more efficient.
Refactor GroupManager to facilitate unit testing
A conservative refactoring: the public API is untouched and the seams needed for testing are now in place.
Existing tests have been adapted to the new API where sensible. Wording has been adjusted to reflect behavioral nature of tests, where applicable.
Improve GroupProvider thread safety
Making the field volatile guarantees that any thread reading provider (in createGroup, deleteGroup, search, getProvider, etc.) will always observe the value last written, not a stale cached copy from a CPU register or L1 cache.
Increase test coverage for GroupManager
This adds a couple of tests for obvious gaps in pre-existing test coverage:
- Verify that when a group's sharing target list removes a group, users of that removed group immediately stop seeing the shared group.
- Verify that toggling sharing with everybody is immediately reflected in per-user shared-group results.