Also, as a freelancer I don't lawyer up for every single contract. Now I work mostly for an hourly rate, and usually for big clients that pay reliably, on a standard contract that I don't get a lot of say in (there are always some details that I address, but I don't get to write my own contract). So in a sense it seems unreasonable to expect up-front lawyering with extremely restrictive clauses on regular freelance projects.
Is the insecurity around startups the issue? Maybe working for a startup does require more lawyering. (My only non-payment came from a tiny 4-person outfit. Too stable to really count as startup, I think. Only resulted in $700 damage, though.) I guess at the very least the contract should contain a clause that the code remains yours until you've been paid.