In a large mixing bowl, combine the yogurt, lemon juice, garam masala, ground cumin, turmeric, chili powder, and salt. Add the chicken pieces and mix until well coated. Cover and marinate in the refrigerator for at least 30 minutes, or overnight for best results.
In a large pan or skillet, melt the butter over medium heat. Add the finely chopped onion and sauté until softened and translucent, about 5-7 minutes.
Add the minced garlic and grated ginger to the pan and sauté for another minute, until fragrant.
Add the marinated chicken (along with the marinade) to the pan. Cook for about 5-7 minutes, stirring occasionally, until the chicken is browned on all sides.
Pour in the tomato puree and bring the mixture to a simmer. Reduce the heat to low and cook for about 15 minutes, stirring occasionally.
Slowly stir in the heavy cream and let the sauce simmer for another 10 minutes, allowing it to thicken. Adjust seasoning with more salt if needed.
Remove from heat and garnish with fresh cilantro before serving.