With paper towels, gently pat any excess moisture from the lamb shanks. Set aside.
In a gallon-sized Ziplock or other bag, combine the flour, chili powder, coriander, ginger, cumin, salt and nutmeg. Add the lamb shanks and shake to dust the shanks in the mixture.
In a large dutch oven (I use my big, round Le Cruset pot), heat the oil over medium heat. Add the dusted lamb shanks from the bag. Reserve any remaining flour/spice mixture from the bag, setting it aside.
Brown the lamb on all sides for about 7 to 10 minutes, careful not to let the flour/spice mixture burn. Transfer the browned meat to a plate and set aside.
Add the thinly sliced onion and celery to the dutch oven and sauté for 5 to 7 minutes until the onion is golden brown. Add the reserved flour/spice mixture and cook for 1 minute, stirring continuously. Stir in the stock and yogurt until well mixed.
Return the browned lamb to the dutch oven, turning the shanks so that they're covered in sauce. Add the cracked cardamom pods and saffron and bring to a gentle boil. Cover tightly with dutch oven lid and cook at medium low for 90 minutes.
Add the tomatoes (and tomato sauce, if you feel the there's not enough liquid in the pot) and cook for an additional 40 to 60 minutes until the lamb is tender and falling away from the bone.
Separate the meat from the bone/fat/gristle and serve with the sauce (which I prefer to put through a gravy-fat separator, first).
Serve hot with rice and naan. Saag aloo or curried lentils also go well with this dish!
Note: make sure your spices aren't stale or the flavorings in this dish simply won't be nearly as delicious.