Heat oil and margarine in a small skillet or wok over medium high heat. Add onion and saute until very brown, 10 to 15 minutes. (Note: This is an important step; if onion is not cooked well, sauce will taste funny.)

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.

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, chile 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.

Add yogurt a little bit at a time, stirring constantly to avoid curdling.

Blend the whole mixture in food processor to puree it (for a very smooth sauce). 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.