In a large bowl, combine the yogurt, lemon juice, cumin, coriander, turmeric, garam masala, paprika, salt, and black pepper. Add the chicken pieces, mix well to coat, and marinate for at least 1 hour, or overnight in the refrigerator for best flavor.
In a large skillet or pot, melt the butter over medium heat. Add the chopped onion and sauté until soft and translucent, about 5-7 minutes.
Stir in the minced garlic and ginger, cooking for an additional 1-2 minutes until fragrant.
Add the marinated chicken to the skillet, cooking until the chicken is browned on all sides, about 5-7 minutes.
Pour in the tomato sauce, stirring to combine. Bring to a simmer, then reduce the heat to low. Cover and cook for 20 minutes, allowing the flavors to meld.
Stir in the heavy cream and simmer for another 10 minutes, uncovered, until the sauce thickens slightly.
Serve hot, garnished with fresh cilantro, over rice or with naan bread.