In a large bowl, combine yogurt, lemon juice, cumin, coriander, garam masala, turmeric, paprika, 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 overnight for best flavor.
In a large skillet or saucepan, melt the butter over medium heat. Add the chopped onion and sauté until soft and translucent, about 5 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 browned on all sides, about 5-7 minutes.
Pour in the tomato puree and bring to a simmer. Reduce heat to low and cover, cooking for 20 minutes, stirring occasionally.
Stir in the heavy cream and simmer for another 5-10 minutes until the sauce is thickened and the chicken is cooked through.
Garnish with fresh cilantro before serving.