A tip for how it could be implemented, from an users perspective:
* Select the song you wish to change the source for and choose Tag Editor > Properties.
* Now at the bottom you have Location. You can now either
a) Edit the location, like replace .mp3 with .flac if the new file is in the same folder or change the location completely.
OR
b) If you click the button in the location field you would get a "Save as"-dialogue instead of the "Chose folder" as it is now. If you would then select an already existing file then that would be the new source, otherwise you would copy/move the file (whichever it does now).
Right now when you want to save it tells you that the file already exists but this could be changed into a pop-up warning: "Do you want to change the location to this already existing file? Tags/metadata will replace current tags in the new file and the old file will be unlinked from your library. OK / Cancel"
One downside with this though is that you can't do it as a batch process. Another idea that could solve this would be if you could select multiple tracks, Edit > Copy tags and then paste onto multiple tracks. This would also include some of the data under properties as play/skipped count. This would of course only work if you would copy from the same number of tracks that you would paste onto, and the copy/paste would go sequentially.