Fresh name rewriters

Note to the reviewer: The only reason we still have ReturnAll() is because you can't express an empty WITH clause in the syntax and so tests would be harder to write if we didn't use ReturnAll in that case.