Use buffer numbers instead of buffer names.

Also don't pass buffer number to functions when they can look it up
themselves.

Using buffer numbers also eliminates any ambiguity which might arise
from symbolic links, where you have potentially two names for a file.

Thanks to @Z1MM32M4N for work on this (see #209).
Add tests.
More tests.
Support symlinked files.

Adds support for when a symlink file <target> points to another file
<source>, where <srouce> is a file under Git version control.

Thanks to @Z1MM32M4N for work on this (see #209).