"users cannot vote if they have the same IP" => Thing is IPs can be shared by a lot of people. This will not let "valid" votes pass through. On the other hand, IPs can be easily changed by proxies, the TOR network or just resetting your modem if you happen to have a dynamic IP address, which I'd say most people do. In fact it is possible (and extremely easy) to automate that.
All I can do is make more emphasis in my previous comment. All these suggestions try to mitigate the issue of human a**holeness. But there is no technical solution for that. Only another human could determine that. The appropriate technical approach, IMO, would be to ease the human analysis, rather than replace it. Then take appropriate action based on TOS.