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 golden brown, 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 5-7 minutes until the chicken is browned on all sides.
Pour in the tomato puree and bring to a simmer. Reduce the heat to low and cover, cooking for 15-20 minutes until the chicken is cooked through.
Stir in the heavy cream and simmer for another 5 minutes. Adjust seasoning if necessary.
Serve hot over cooked basmati rice, garnished with fresh cilantro.