Cut the chicken breasts into bite-size pieces and set aside. Peel the onions and chop them fine. You should have about 3 cups of onion. Mince the garlic and add to the bowl of chopped onions.
In a big frypan that has a lid, heat the butter and oil, then saute the onions and garlic for about 1 minutes, until the first hint of browning. Use "medium-high" heat.
Crack the cardamom seeds between your fingers, just to get the shell open. Add them to the pan. Add the ginger, cloves, bay leaves and salt. Saute until the onions are nice and brown, about 5 more minutes.
Mix the coriander and red pepper with the yogurt. Add the yogurt to the frypan, stirring as you pour, slowly enough that the onion doesn't stop bubbling. It could take several minutes to do this, depending on the diameter of your frypan. When the last of the yogurt dries up, add the chicken pieces and brown them. Add 1/2 cup water, reduce heat, cover and simmer 2 minutes.
Stir in the milk and turn off the heat. It needs to sit a few minutes to let the flavors blend. The longer you let it sit after cooking, the better it will taste (up to several hours).
While the chicken is sitting, cook some rice. Saffron rice to go with this dish.
fish out the bay leaves and as many of the whole cloves as you can find, before serving. Check to make sure it is moist enough (it should have the consistency of applesauce). Reheat over low heat.
* Indians put a lot more salt in their cooking than this recipe calls for; if you want to make it more authentic you should double the salt. Indians also don't like chicken skin and will go to great lengths to prevent even small pieces of chicken skin from getting into the food.
* If you can't find green cardamom seeds, don't bother using white ones, they've been bleached and processed and don't have much flavor left. Use ground cardamom instead