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.
On the point about the dictionary you're absolutely right, it should be a set actually. I was doing something different with `Supply` earlier to generate names, I think it's left over from that.

Yes, I meant the case where it has to come into scope - if we don't add `foo_1` to the dictionary after generating it when renaming `foo`, we won't know that it has already been used when we encounter `foo_1` later, meaning the second case wouldn't be renamed.