Moving the `modify_expected_output_filenames()` functionality down into the actual compiler class, rather than in the `CompilerNode` class which has no idea what the compiler is going to do.

This removes the `COMPILERS_BY_EXTENSION` functionality.  Not sure that it's needed anyway.