Dynamic files are generally created by the debugger when while debugging
it can't find a matching file on disk. Since these files don't exist on
disk, we shouldn't check if the file exists on disk, and allow the content
to be controlled by the host.
* Create folders for sys.writeFile
* Use project root path for emit output file name
* Normalize project file path for external projects
* Patch writeFile for all sys implementations
* Use the original file for single inferred project case
* recursive create directory for all sys implementations
* Add API to get only the emited declarations output
* Add nonModuleBuilder
* Add basic tests for CompileOnSaveAffectedFileList API
* Add API for compile single file
* Avoid invoking project.languageService directly
* Add API to query if compileOnSave is enabled for a project
* Seperate check and emit signatures
* Use Path type for internal file name matching and simplifying builder logic
* Always return cascaded affected list
* Correct the tsconfig file in compileOnSave tests
Also move the CompileOnSave option out of compilerOptions
* Reduce string to path conversion