In a mixing bowl, combine yogurt, lemon juice, cumin, coriander, turmeric, garam masala, chili powder, salt, minced garlic, and grated ginger. Mix well.
Add the chicken pieces to the marinade, ensuring they are well coated. Cover and refrigerate for at least 1 hour, or overnight for best results.
Preheat the grill or oven to medium-high heat.
Thread the marinated chicken onto skewers. Grill for about 10-15 minutes, turning occasionally, until fully cooked and slightly charred. Alternatively, preheat your oven to broil and cook the chicken on a baking sheet for 10-15 minutes.
In a large skillet over medium heat, heat vegetable oil. Add the chopped onion and sauté until golden brown, about 5 minutes.
Add the minced garlic and grated ginger, and cook for an additional minute until fragrant.
Pour in the crushed tomatoes and simmer for 10 minutes, stirring occasionally.
Stir in the heavy cream and garam masala, and season with salt to taste. Allow the sauce to simmer for another 5 minutes to thicken.
Remove the grilled chicken from the skewers and add it to the sauce. Stir until the chicken is thoroughly coated.
Garnish with fresh cilantro before serving.