In a large bowl, combine the yogurt, lemon juice, cumin, coriander, turmeric, garam masala, salt, and black pepper. Add the chicken pieces and mix well to coat. Cover and marinate in the refrigerator for at least 1 hour, or preferably overnight for best flavor.
In a large skillet or saucepan, melt the butter over medium heat. Add the chopped onion and sauté until translucent, about 5 minutes. Stir in the garlic and ginger, cooking for an additional 1-2 minutes until fragrant.
Add the marinated chicken to the skillet, cooking until browned on all sides, about 5-7 minutes.
Pour in the tomato sauce and stir to combine. Bring the mixture to a simmer, then reduce the heat to low. Cover and cook for 15-20 minutes, allowing the chicken to cook through.
Stir in the heavy cream and simmer for another 5 minutes, adjusting seasoning if necessary.
Serve hot, garnished with fresh cilantro, alongside basmati rice or naan.