restructured core compiler to make it easier to target other impls (om and reagent)