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.
I'm not sure I see how this works exactly. What monad is `lift` lifting?