In a large bowl, combine the yogurt, lemon juice, cumin, coriander, turmeric, garam masala, chili powder, and salt. Add the chicken pieces and mix well to coat. Cover and marinate in the refrigerator for at least 1 hour, or overnight 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 (along with the marinade) to the skillet. Cook for about 8-10 minutes, stirring occasionally, until the chicken is browned and cooked through.
Pour in the tomato puree and stir to combine. Simmer for 10 minutes, allowing the flavors to meld.
Reduce the heat to low and stir in the heavy cream. Cook for another 5 minutes, then remove from heat.
Serve hot, garnished with fresh cilantro, over rice or with naan bread.