Refactor compiler logic out into a separate class to allow different compilers to be swapped in.
Manual merge conflict resolution.