Learning to Infer and Execute 3D Shape Programs