Much obliged for the considered argument, rouguenuke. I mean that sincerely. "Morality is subjective!" has become a catchphrase in Internet discourse seldom backed by an argument, as in zyzygy post quoted below. Where there's any critical thought behind the catchphrase at all, it usually involves the conflation of moral judgment and morality in itself, as in the Quag post below.
Now, your argument is sound. Let me acknowledge this up front. Your argument is sound, but it is not an argument that morality is subjective -- it is an argument to the conclusion that moral judgment is subjective. And let me acknowledge the soundness of that conclusion -- moral judgment is subjective.
Moreover, "there is no universal set of morals," as you say, which is an empirical generalization and also sound, I acknowledge, but also not a generalization about morality in itself, but rather, again, about moral judgments as codified by various cultures.
A very good key to the distinction I'm drawing is given by you in your argument against moral universality. You argue, "Universal laws are just that, totally universal, not simply mostly universal. Heat flows to cold is a universal law. Gravity is the attraction of objects of smaller mass to those of larger mass. Morality," you add by way of contrast, "is based on people's perceptions of the world."
But the very same point about perceptions applies to universal physical laws as well. Perceptions of heat vary from individual to individual, but heat itself and its laws are universal and objective. Morality, the rightness or wrongness of certain human behavior, is universal to human behavior everywhere and throughout time, and behavior is objective.
Moral judgments are subjective.
Morality is universal and objective.
Please note: my argument is intended as in addition to Mashmont's argument from consequences.