add walk, reimplement pre/postwalk using walk
split infer-tag in infer-tag and infer-constant-tag
remove reflection
try reducing the number of ast passes