In a large bowl, combine the yogurt, lemon juice, cumin, coriander, garam masala, turmeric, paprika, salt, and black pepper. Add the chicken pieces and mix until well coated. Cover and marinate in the refrigerator for at least 1 hour, or overnight for best flavor.
In a large skillet, melt the butter over medium heat. Add the chopped onion and sauté until soft and golden, 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-8 minutes.
Pour in the tomato puree and bring to a simmer. Reduce heat to low, cover, and cook for 15-20 minutes, stirring occasionally, until the chicken is cooked through.
Stir in the heavy cream and simmer for another 5 minutes. Adjust seasoning if necessary.
Serve hot, garnished with chopped cilantro, over rice or with naan bread.