Define Core language AST and implement a desugar function from Program to ProgramC.

Currently, CPP and Core are exactly the same. Core will be reduced to a minimal
language in subsequent steps. The CPP interpreter and compiler will be
rewritten to use Core as the source language.