In a medium bowl, mix the marinade ingredients together, then toss chicken until evenly coated. Wrap and store in the fridge to marinate 6 hours to overnight.
Making the curry takes about 45 minutes. Start by crushing or finely dicing the ginger and 2 cloves of the garlic. A mortar and pestle is ideal. Set aside.
Roughly chop the remaining 2 cloves of garlic. Add the 1/2 cup oil to a large pan and set over medium high heat, then add the garlic. Cook garlic until golden brown, about 2-3 minutes, watching carefully to ensure it doesn't burn.
Remove the garlic with a skimmer or slotted spoon and set aside. Add the bay leaf, cardamon, and cinnamon. Cook for about 1 minute, or until the cinnamon stick opens.
Reduce the heat to medium and add the reserved ginger-garlic paste from step 2. Cook until paste has browned a little, about 5 minutes, then add the blended tomatoes, being careful of splattering. Cook, stirring occasionally, until the sauce is reduced about 2/3 and darkened, roughly 15 minutes.
Add the butter, chili powder, garam masala, cumin, the reserved crispy garlic from step 4, and a pinch of salt. Cook for another 10-15 minutes, or until sauce has reduced by about 1/2, then stir in the cream. Cook for another 5 minutes, then remove from the heat and set aside while you make the chicken.
Preheat your grill on high. Oil the grates well, and then skewer and and cook the chicken until charred and just cooked through, 8-10 minutes. If you don't have a grill handy, fry the chicken in 1-2 tbsp oil until just cooked through.
Add the chicken to the curry and simmer for another 5 minutes, stirring evenly to coat.
Plate and garnish with ginger matchsticks and cilantro (optional).