CVS is Subversion's predecessor. CVS had some problems, such as not allowing an empty directory to be placed under version control and poor support for move/rename file operations. Also a CVS commit could fail midway though, leaving the repository with an incomplete set of changes. SVN addressed those issues and replaced them with a new set of problems.
For the Linux project, neither one really addressed their needs, so Linus Torvalds influenced the development of "git", which is more distributed and better suited to having groups of independent teams on a very large project. Others have tried their own approach, such as Mercurial, which is favored by the Xen developers.
A good version control system is really a must on any large project, even if there's just one person. It provides a backup scheme, and it allows you to unwind your false starts and return to a baseline. Plus, if a project in production comes down with a serious error, but you've currently got the whole thing torn apart in the middle of creating a whole new release, you can pull the production build source and repair it and commit that as a maintenance branch while the main development continues. Or vice versa, where development team(s) work on branches and merge them into the main trunk when the changes are ready for prime time.
When you commit changes to a code repository, typically the version control system tags them with the ID of the committer and includes a user-supplied comment which hopefully includes what the change is. All the major VCS tools have the ability to display change logs and some form of difference display that highlights what the changes are. There are also good online tools for that. I use the Trac system (so does JavaRanch), and it has a very nice set of functions to not only browse and highlight versions and their changes, but to tie them back to their Trac task and trouble tickets.
Co-ordination will vary depending on the people and the needs. At the moment, I've got someone about to come onboard who has to change the text in a lot of web pages. And just this last week, someone else was introduced who'll be restyling the pages. They'll probably overlap on a lot of files, but at the moment, I'm leaning on giving each one of them a separate project branch to play with while I do the business logic mods in a third branch. Eventually, I'll merge all the different branches into the main trunk to create a new release.