I like WinMerge but its not perfect. Emacs's ediff is also great (and slow) but I'm not using emacs currently.
Winmerge for 2-way and kdiff3 for 3-way although I'm trialing meld now there's an official windows installer.
Meld on Linux. Winmerge on Windows. I cannot find anything I like on OS X - XCode is fat as fuck
Second on Meld - great UI, compare folders as well as files. You can get Meld on Windows (unofficial installer-works fine) and Mac through MacPorts (meh).
Araxis Merge. It's not free, but I've never used anything as good as it.
tkdiff because (a) it installs on Linux with requiring lots of dependencies and (b) supports a -r parameter for diffing against a previous version from source control (but only for Subversion/CVS; not Git)