To start off, throw ginger and garlic into a small food processor and blend until smooth. Divide into 2 parts. (If you do not have a food processor, just chop them as small as you can with a knife)
Place chicken pieces into a mixing bowl. Add half of the ginger-garlic paste, garam masala, chili powder and salt. Combine everything together.
In a large Dutch oven, heat up 4 tbsps of olive oil on high heat. Place 1/3 of the chicken in the hot oil and fry until slightly brown, but not cooked through, for about 5 minutes. Repeat with the rest of the chicken. Transfer the fried chicken onto a clean plate and reserve for later.
After you have removed the last batch of chicken, add 3 tbsps of butter into the same Dutch oven. Throw in the onions and fry for about 3-4 minutes. Add chili peppers, garam masala, turmeric, coriander powder and cumin seeds. Stir, and fry for another 3-4 minutes.
Add tomatoes and water. Stir, trying to scrape the browned bits. Cover with a lid and let it cook for 15 minutes.
After the tomatoes are cooked, we need to puree the sauce. You may do so by using an immersion blender, or, if you don't have one, by using a regular blender and working in batches. Remember that the sauce is really hot; so, do not fill your blender more than 1/3 of its capacity and, while blending it on the lowest speed, keep the lid a little ajar to let the steam escape.
Transfer the pureed sauce back into the Dutch oven and bring back to a boil on low heat. We are almost done, I promise. :-)
Add ketchup, honey, a bit of salt and milk. Taste the sauce to see if it needs any more salt or seasoning.
Add chicken, stir and keep cooking on low heat for another 10-15 minutes.
Serve with basmati rice, warm naan bread or vegetables.