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.