In a large bowl mix together all of the ingredients for the marinade. Stir until well blended. Mix in pieces of chicken. Cover and refrigerate for 4-24 hours.
In a large pot, melt butter over medium heat. Add onions and saute for 7-8 minutes until soft. Do not brown. Mix in ginger and garlic, cook for 1 minute until fragrant.
Add tomatoes, chili powder, coriander, cumin, and turmeric. Bring to a simmer. Stir in 1/4 cup water, and let cook for 10 minutes.
Use a blender or immersion blender to puree sauce until completely smooth.
Meanwhile heat 1 Tbls of canola oil in a large skillet over medium high heat. Add the chicken and cook until browned on all sides.
Once cooked, add chicken to pureed sauce. Once it starts to simmer, mix in heavy cream and garam masala. Cook for 2-3 minutes or until it starts to simmer again.
Serve over rice and/or with Naan bread