Clean up and document the code for diffing signatures.

Review Request #9569 — Created Feb. 1, 2018 and submitted — Latest diff uploaded

Information

Django Evolution
master
cc1ff40...

Reviewers

The Diff class is responsible for taking two project signatures and
diffing them, showing the changes that the target signature has that the
original one does not, and generating a hinted evolution to turn the
original into the target. It's old code that was getting harder to
reason about and maintain.

This change fixes up that code a bit, adding and clarifying
documentation and separating out information gathering from state storage
for the diff (and making it far more efficient in the process). It's now
easier to read through and see the various bits of logic and to modify
it. This will be needed for the upcoming signature work.

Unit tests pass for all versions of Django.