I know there are those who will disagree with my opinion on this but I think it all boils down to respect. Any term that attacks a person simply for being who they are is derogatory and uncalled for. You can insult people all you wish but there are certain lines where its no longer a condemnation of another's thoughts or actions but an attack on a their existence.
Freedom of speech is fine. Disagreeing with someone is fine. If your so vehemently opposed to someones words or actions you feel the need to insult them fine. But never attack their existence. Like it or not they are still Human and should be treated as such.
Besides there are a huge selection of words that usually far better suite what you intend to imply.