begin porting core macros from cljs.core