update to not automatically reuse object, add factoryForConstructsWith macro
updated to support setup block, member type inference