Compiler Layering

    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

and then

   services

With this, anyone can now open any layer of the compiler and have it correctly work in the IDE, as well as build it from the command line.

--

Note: this is a work in progress.  there are still additional commits coming.
Add `"program.ts" to the `definitionsRoots`.