In a bowl mix together the yogurt and the rest of the ingredients for the marinade. Add the chicken pieces and mix until they are well coated. Cover and refrigerate for 4-24 hours.
Preheat oven to Broil. Place chicken pieces on a baking sheet. Cook for 3-4 minutes, flip the chicken and cook for 2-3 minutes more. Remove from oven.
In a large pot, melt butter over medium heat. add onions and cook for 5-6 minutes, until they are soft. Mix in the ginger and garlic and cook for 1 minute, until it is nice and fragrant.
Add the tomatoes, chili powder, coriander, cumin, turmeric and garam masala. Add water and bring the mixture to a simmer. Cook for about 10 minutes.
Using an immersion blender, traditional blender or food process to puree the sauce until it is smooth.
Add the chicken and the juices to the sauce. Stir in the cream and cook for about 10 minutes until the cause is bubbling and thick.
Serve over white rice. Garnish with cilantro if desired.