In a medium bowl mix together the chicken and all the ingredients for the marinade: yogurt, ginger, garlic, garam masala, turmeric, cayenne pepper, and salt. Toss to coat and allow to sit for at least 10 minutes.
In a Dutch oven or large skillet heat the oil over medium-high heat and brown the chicken. (cook the chicken in batches if necessary for even browning) Remove the chicken from the pan and set aside for later.
In the same pan, over medium-high heat, melt the butter and add the garlic and ginger and cook for 1-3 minutes until fragrant but not brown, stir continuously try to free the the bits of chicken marinade from the bottom of the pan. Lower the heat to medium and add the garam masala, cumin, turmeric and coriander and continue stirring for 30 seconds to 1 minute. Add the onions and stir well. Add the water and cook together until the onions are tender.
Stir in the tomato puree and reduce the heat to low simmer for 10 minutes stirring often.
Add the salt, cream, honey, and the reserved chicken and any juice from the chicken. Stir together and simmer 15-20 minutes. Taste and season with more salt if needed.
Serve over steamed rice and garnished with cilantro.
