allow normal outfn calls to be lazy

(allowing a subset of proper keys) and adding better error handling at macroexpand time