Over medium high heat add oil and butter to a cast iron skillet, or wok. Add the onion and saute to to a very brown state. 10 to 15 minutes. The caramelization is key to the sauce
Add ginger and garlic to onion and saute for an additional 2 minutes. Process onion/ginger/garlic mixture in food processor until smooth. Do not rinse food processor, we will use this again and let's not waste the taste..
Place onion mixture in a large saucepan. Stir in the cinnamon, black pepper, coriander, cumin, turmeric and cayenne pepper and cook over low heat until mixture is thick and has the consistency of a paste.
Puree tomatoes, chili peppers and cilantro in food processor until smooth. Add to onion mixture and stir well over low heat, cooking off moisture from tomatoes and cilantro. temper in the yogurt a little bit at a time, stirring constantly to avoid curdling.
Blend the whole mixture in food processor to puree it, we are looking for a very smooth consistency. Return to saucepan, add water and increase heat to high; bring sauce to a rolling boil. Cover saucepan and boil for 3 to 5 minutes. Reduce heat and simmer until desired consistency is reached.