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.
Ok, so I've added a test that fails without this `modify`.

I see what you were saying before now, and yes, the initial value for this will never be returned from `lookup`. What happens though, is when we reach the next `foo_1`, `updateScope` will check `scope` for the key `foo_1`, and finding that there is a value there it will generate a new name `foo_1_1` and replace the value, so when we next `lookup` the correct value is returned.

I'm not sure that explanation makes anything clearer at all :) If you look at the generated code with and without the `modify` line you can probably figure it out though.