some compiler efficiency tweaks to try to chip away at load times

some ways to cut down on code generation
- be able to use the interpreter for more top-level expressions
- less recompilation in inference.jl