Allow compiling arbitrary files to arbitrary output files. Support
common compiler options like include paths and preprocessor defines.