Return an enumerator instead of an array from Commit#source_files
Lazily lookup source in repository when required.
Skip commit when file containing method definition is unchanged.

This relies on the fact that the SHA of the file blob will be the same in
the tree attached to different commits as long as the content of the file has
not changed.
Find only first definition of method in commit.

This is an optimisation. Given that we were only considering the first
definition of the method, there's no need to keep looking for others
once we've found one.