The Size-Change Termination Principle for Constructor Based Languages (Logical Methods in Computer Science, 2014)