Layer the compiler so that every layer only depends on hte layers below it.

The layering is now:

types
core
scanner
parser
binder
checker
emitter
program
Rename typechecker parameter related to whether or not we produce diagnostics.

Comment what the flag means.
Make the emitter no longer depend on the Program.

This breaks layering.  Also, it means the emitter depends on too large a surface area.
Now the emitter declares exactly what it needs, and only gets that.
Remove the dependency that TypeChecker and Emitter have on Program.

Instead, these layers explicitly specify the functionality they need, and don't take in anything extra.
Clean things up so the services layer can easily emit without having to contort compiler hosts.
Don't expose EmitHost.  it is only used by a non-exposed function.
Remove obsolete comment.
Merge branch 'master' into layering

Conflicts:
	src/compiler/checker.ts
	src/compiler/parser.ts
Merge branch 'master' into layering
Moved helpers to bottom of 'getDefinitionAtPosition'.
Made 'location' non-optional in 'getSymbolKind'.
Fixed messed-up formatting from moving around code.
Normalize a few fourslash line endings.
Added goToDef count verification in fourslash facilities.
Fixed 'verifyDefinitionsName' to check the container name properly.
Added test using code from original issue.
Rename file.
Use 'definitionCountIs' in union property tests.
Added test for goToDef on union types.
Merge branch 'master' into layering

Conflicts:
	src/compiler/checker.ts
	src/compiler/utilities.ts