Fix implicit overwrite for extensionless files

This change fixes issues #15240, which I filed earlier. It's a check to ensure that any file being compiled cannot be assigned an output file with the same name as the source implicitly. 

For instance, `rustc myfile` would before overwrite myfile with the binary of itself. Now, the compiler sees this as an error, unless the compiler is given a directive to overwrite the file via the -o flag.