Knowledge Decomposition and Subgoal Reification in the ACT Programming Tutor