In a mixing bowl, combine the yogurt, lemon juice, vegetable oil, cumin, coriander, garam masala, turmeric, paprika, salt, and black pepper.
Add the chicken cubes to the marinade and coat well. Cover the bowl and refrigerate for at least 1 hour, preferably overnight.
Preheat the grill or oven to medium-high heat. If using skewers, thread the marinated chicken onto them. Grill or bake for about 10-15 minutes, or until the chicken is cooked through and slightly charred. Remove and set aside.
In a frying pan or skillet, melt the butter over medium heat. Add the chopped onion and sauté until golden brown, about 5-7 minutes.
Add the minced garlic and grated ginger, and cook for an additional 2 minutes until fragrant.
Pour in the crushed tomatoes and let it simmer for about 10 minutes, stirring occasionally.
Stir in the heavy cream and bring the mixture to a gentle simmer. Add the cooked chicken pieces to the sauce and mix until well combined.
Simmer for another 5 minutes, allowing the flavors to meld together. Adjust seasonings to taste.
Garnish with fresh cilantro before serving.