Adjust overwrite/backup/skip logic

This shouldn't alter behaviour of the script
Get rid of long ifs

This commit also preserves observable behaviour
Drop `link_files` function

It had strange name anyway
Rename $source to $src and $dest to $dst

`source` is a terrible name for a variable in shell scripts:
it gets highlighted as a keyword—that's annoying.
Extract all the linking logic to `link_file`
Check if target exists and is a symlink
Merge pull request #148 from kirelagin/enhance

Part of #147