Mix the yogurt with the ginger, garlic, garam masala, corriander, cumin, cayenne, salt, and pepper.
Add the chicken to the yogurt-spice mixture and mix well. Cover the bowl with plastic wrap and refrigerate it for 2-3 hours or overnight.
After the chicken is marinated, make the sauce by sauteeing the onion in the ghee or butter until it starts to soften, then add the ginger and garlic and cook for 2 more minutes or until aromatic.
Add the tomatoes to the onion-ginger-garlic and turn the heat way down, to a bare simmer. Let this mixture cook for about 30 minutes or until most of the tomato juice has evaporated and the onions are super-soft.
While the tomatoes are cooking, put the yogurt coated chicken onto a baking sheet and into the oven. Broil the chicken - about 6-inches from the broiler - for 3-4 mintues or until it starts to brown in spots. It won't be cooked, so don't worry about that.
Chop the chicken into 1-inch chunks and set it aside for a few minutes.
Add the tomato-onion mixture to a blender or use an immersion blender, to puree the mixture. If using a blender, put a towel over the top and remove the plug from the top lid, to avoid explosions.
Return the super-smooth sauce to the pan and add the cream, garam masla, and chicken (and any pan juices). Simmer the mixture for 10-12 minutes or until the chicken is cooked through.
Season with salt and pepper and garnish with fresh cilantro. Dig in!