In a bowl, mix together all of the ingredients for the chicken marinade and then stir in the chicken, Let marinate for 30 minutes to an hour (or overnight if time allows).
Heat oil in a large skillet or pot over medium-high heat. When the oil is sizzling, cook the chicken, adding a few pieces at a time to avoid overcrowding the pan. Fry on each side about 3 minutes or until browned on each side. Set aside and keep warm. (You will finish cooking the chicken in the sauce.)
Melt the butter in the same pan. Fry the onions for about 3 minutes (or until soft) while scraping up any browned bits stuck on the bottom of the pan.
Add garlic and ginger and sauté for 1 minute until fragrant, then add garam masala, cumin, turmeric and coriander. Fry for about 20 seconds until fragrant, while stirring occasionally.
Pour in the tomato puree, chili powder and salt. Let simmer for about 10-15 minutes, stirring occasionally until sauce thickens and becomes a deep brown red color.
Stir the cream and sugar into the sauce. Add the chicken and its juices back into the pan. Cook for 8-10 minutes until chicken is cooked through and the sauce is thick and bubbling. If sauce gets too thick, pour in water to thin out.
Garnish with cilantro and serve with white rice.