new class to easily recurse down the entire AST

documented expression observer callbacks a bit more