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.
But in that case, surely either `foo_1` would already be in scope, in which case that name would not have been chosen, or not, in which case it has to _come into_ scope, at which point, a new name will be picked.