First of all, you need to put your foot down with your son. I have this same problem with my daughter being overly attached to my mom and my grandmother. It got to the point that she was NEVER home. At 3 years old, kids are old enough to understand what you are saying if you talk to them. You and your husband need to sit down with him and explain to him that visits to grandma's house are fun and they're okay every now and then but his home is with you and that's where he needs to be. Keep explaining and he'll get the message. Then, the next time he starts going into fits (and I'm sure they are bad because my daughter does it too) whenever your mom is leaving, just firmly tell him "No, not tonight. Maybe another night." Another thing I found helpful was to have a schedule. Certain weekends are for my mom if she wants the kids and another weekend is my mother in law's weekend and so on...this helps the kids understand that just because they aren't staying when they want to, doesn't mean they won't stay ever. Kids have a hard time with the concept of later. They usually just think you mean "No" but if you explain why and when they can stay another time, they usually have an easier time accepting it. Just remember, you are the parent and you have to be firm with him.
As for your mother, tell her that sometimes she may just have to walk out the door and hear him cry for her. My mom hates doing it and I know the exact pouty face she will make as she is leaving. Telling your son (or you) that she is going to do something and then not doing it is not only just plain rude, it's not teaching your son to keep promises. That should be first and foremost your (and your mother's) most important job. It takes a village to raise a child. Explain to your mom that you would appreciate it if she would help you teach him this valuable lesson on patience and keeping promises by telling him "No, mommy said no. You can stay this weekend," and simply walking away.