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
Merge branch 'master' into layering

Conflicts:
	src/compiler/checker.ts
	src/compiler/utilities.ts
Remove unnecessary capture of the diagnostics type checker.
Merge branch 'master' into layering

Conflicts:
	src/compiler/parser.ts
Merge branch 'master' into layering
Merge pull request #1512 from Microsoft/layering

Compiler Layering