split Compiler into frontEnd and backEnd

for Tortoise's benefit (Tortoise wants frontEnd only), but it also
improves the clarity of the code