They didn't withdraw an offer, they terminated someone who had accepted and was actively working for the company.
They didn't do anything wrong.
Yes, they did. Is it okay to let the OP go quickly because they made a mistake: no resources to deal with visa issues, wrong domain expertise, etc? Yes. Is it okay to do this without compensation, especially after rescinding other offers, working his personal network, etc? No!
The OP din't just do some code, he worked his professional network and went out on a limb for this startup. They screwed him, probably for the right reasons, but they need to admit the mistake and make the OP right.