define Emit and Eval protocols to abstract evaluation and code generation from the Expr and cleanly separate compiler from analyzer