Refactored codebase to share values between front end and back end

This is a high level reorganization of our codebase to allow us to share primitive values between frontend and intermediate representations.

The most elegant approach to elaboration is to make the intermediate representation an exact subset of the front end representation. This avoids having to write a translation step where we turn a frontend boolean into an intermediate boolean, for example.

Specifically, everything lives in `org.manifold.compiler`, frontend only things live in `org.manifold.compiler.front` and intermediate only things live in `org.manifold.back`.