Split up the frontend.cpp module.

This splits up the frontend.cpp module into separate classes, mostly to make the file easier to read. But there's a few other changes to start cleaning up AMBuild's C++-centric behavior and make it easier to implement new generators. Most important, the `Compiler` class is now a base class, since the cc/cxx split is an AMB2 implementation detail.