Added code to build the callgraph.

With the new explicit stack design for recursion, it migh make sense to do this after desugar-match, since that introduces a lot of new functions. They shouldn't affect the strongly connected components though.
Added the ability to dump the call graph as a DOT file. Also, found a bug in the trampolined interpreter.
Dump strongly connected components in the call graph as well.
Move all the nanopass languages to their own file.

I'm not entirely sure this is a good idea.
Rewriting make-kernel-dimensions-explicit using nanopass.
Rewrite make-work-size-explicit in nanopass.
Created a language for after hoist-kernels / before generate-kernel-calls.
Rewrite generate-kernel-calls with nanopass
Move the call graph stuff later in the compiler.
First tail recursive function call in a kernel worked.
Added a test case that uses mutual recursion