Revive TypeWriter

This change adds back the typeWriter pass on all the compiler tests. The typeWriter walks the tree and prints the types of all expressions and nodes (it actually tries to pick the same node kinds as the old typeWriter). It gets the type of every node, using the getTypeOfNode function (new in this review). If it gets unknownType, it just prints the name of the node. That fallback is mostly used for namespaces, which have no types associated with them (again, we want to resemble the old type writer as much as possible for now).

I've added some publicly exposed functions to the checker. The main one is getTypeOfNode, but I have altered and removed a few others.

Some tests crashed when run with typeWriter. I have opened bugs for these.

We still have a bunch of work to do to make the new type baselines look like the old ones in order to do a baseline comparison.
Consider moving this into the switch (both type assertion case and expression case).