Renamer pass

Resolves #534, resolves #511.

Doesn't resolve #449. I tried moving the renaming pass up into desugaring before binding groups are created, but that has its own problems, as we need binding groups to be able to rename properly. Not to mention it could make compiler errors even harder to understand later on.

Please rip it to shreds, as although the test pass, `test-everything` compiles and `purescript-in-purescript` still runs I'm still nervous about it given how error prone this kind of thing can be.
Actually, I changed my mind again, a minute ago I thought it was wrong, but now I remember why...

It's in there so if we generate a name `foo_1` and then later there's a `foo_1` in the original PS, it will rename the second instance to `foo_1_1`. We need it in the dictionary so the `find` just above will give us the new name.