The testing infrastructure contains no fewer than six TestProjectSnapshotManager classes. This change merges five of them into one and converts the sixth into a mock.
This change breaks the dependency of `VsSolutionUpdatesProjectSnapshotChangeTrigger`
on `ITextBufferProjectService`. The small amount of VS shell code needed
to retrieve a project file path from an IVsHierarchy has been inlined.
The larger part of this change is a refactroing of the tests for
`VsSolutionUpdatesProjectSnapshotChangeTrigger`. These tests now
simulate the same threading behavior as inside Visual Studio.
Finally, I've added a vs-threading analyzer configuration file to our
Visual Studio assemblies to allow our
`JoinableTaskContext.AssertUIThread()` extension method to be considered
by the VS threading analyzers.