Optimize ScopedShardVersionCriticalSection class with respect to multi-thread initialization. In particular in the case where a lot of threads try to concurrently instantiate this object.
The idea is to avoid entering in the critical session if it is not strictly needed.
Modify onShardVersionMismatch in order to:
- Wait on an ongoing shard version refresh or trigger it with a forceShardFilteringMetadataRefresh call
- Remove forceRefreshFromThisThread flag
- Remove unused hasAdditionalCatalogCacheForFiltering part