Redesign the AstWalker strategy.

Use callbacks extensively to group logic together and avoid scattering
things around haphazardly (and several ugly hacks) in static.cpp.

Still need to apply the same transformation to irgen.cpp.