Clean stability analysis

This is me learning and cleaning up stability analysis — adding comments, changing (and hopefully improving) names, etc. Last commit (to clean up) changes some code, trying to improve it.

For the remote future, there's some space for cleaning it up: we propagate no stability information from a function body to its argument. It's not obvious how to improve on that, but I imagine one can do better (see GHC's absence analysis); I imagine some sort of type inference might also be helpful here.

Not to merge, and to rebase on master.