Port over changes to the ScriptSnapshot API from the languageService-v2 branch.

Port over changes to the ScriptSnapshot API from the languageService-v2 branch.
I would rather this was optional. it would have made sense if it was used in any ways in this scenario.. but it is not.. we are just burdening the users. the other alternative, is to have an overload that requires version and isOpen, and up to the user to decide which one to use.
even better.. we can define version and isopen in the extension of SoruceFile in services.ts, this way we are sure no one can use them other than the service.