Marinate the chicken: In a small food processor, pulse the garlic and ginger (or chop finely by hand). Add the yogurt, cumin, coriander, cayenne, salt, and oil and puree until smooth. In a large bowl or Tupperware container, mix the chicken with the yogurt mixture until very well coated. Cover and marinate in the refrigerator for at least 1 hour and up to 24 hours.
Make the sauce: In a medium Dutch oven or lidded saucepan, heat the vegetable oil over a medium flame. Saute the onions, garlic, and ginger until soft, about 8-10 minutes. Stir in the garam masala, cayenne, and serrano chili pepper. Cook for 2 more minutes, until very fragrant. Carefully pour in the tomatoes, sugar, and salt.
Simmer partially covered over medium-low heat, stirring occasionally, for 20 minutes. (The sauce should be much thicker than what you expect–the cream and the chicken juices will thin it later.)
Meanwhile, cook the chicken: Preheat the broiler. Remove the chicken from the marinade and lay the pieces flat on a foil-lined baking sheet. Broil until the chicken is slightly browned on top (it wont get too charred), about 5 minutes. Flip the chicken and broil again on the other side for another 5-7 minutes. (The chicken will not be completely cooked through when you remove it.) Remove to a cutting board and roughly chop. Pour any remaining juices into the masala sauce, along with the reserved marinade.
Add the chicken and juices to the sauce. Simmer for 10-15 minutes until the sauce has thickened and the chicken is very tender. Add the cream and stir to combine. Stir in half of the cilantro.
Serve alongside basmati rice and garnish with the remaining cilantro.