Deduplicate record stub generation logic

Currently the logic is duplicated between test code & the smart tagger.
I'm trying to unify as best as possible the logic, and only leave boilerplate code (mostly due because of VS API), so that we can better mock the IDE environment.

With this common infrastructure, it's gonna be easier & faster to create similar features.

* [x] I renamed tests with (1), (2) and (3) in their names to 1, 2, and 3 because it created weird behavior with the test explorer and NUnit
* [x] Find better name for ISnapshot, VSSnapshot, VirtualSnapshot, ICodeGenerationInfra...
* [x] Move ISnapshot, VSSnapshot, VirtualSnapshot, ICodeGenerationInfra to their own file
* [x] Transform RecordExpr to record type (was union type, appeared to be useless)

``ICodeGenerationInfra`` looks too much like a ``LanguageService``/``VSLanguageService`` bis. It shows that there should be a generic & unified interface behind ``LanguageService`` & ``VSLanguageService``.