Heat the oil in a large pan over a medium heat. Add the black peppercorns, black and green cardamom pods, cloves, cinnamon, and mace, and fry for 1 to 2 minutes, or until the spices are sizzling and fragrant.
Add the chopped onion, and fry for 8 to 10 minutes, stirring regularly, or until golden brown. Add the lamb pieces, and fry for 3 to 4 minutes, stirring continually, until the lamb pieces are golden brown all over.
Meanwhile, in a food processor, blend the garlic cloves, and ginger, with 1 tablespoon of water to a fine paste. Add the garlic and ginger paste to the lamb mixture, stir well to combine, and then reduce the heat, and continue to cook for 3 to 4 minutes, stirring frequently.
Stir in the ground coriander, cumin, red chile powder, fennel seeds, garam masala, tomato pulp, yogurt, and salt, to taste. Cover the pan with a lid, and then reduce the heat to low, and simmer for 10 to 12 minutes, or until the sauce has almost completely dried out.
Add 2 to 3 tablespoons of boiling water to the sauce, stir well and simmer for a further 7 to 8 minutes, stirring continually and adding splashes of water as necessary, until the volume of liquid has reduced and the sauce has thickened.
Add enough boiling water to almost cover the lamb, and bring the mixture to a boil, then reduce the heat to a simmer, and cook for 8 to 10 minutes, or until the lamb is cooked through.
Stir in the chopped fresh cilantro just before serving.
*Can be found at specialty Asian markets. If you're worried about biting on whole spices, you can leave them out of this dish. Fry the spices first, and then fish them out with a slotted spoon, tie them in a muslin pouch and add it back to the simmering curry. The spice pouch will continue adding flavor. Do try the dish and add extra garam masala powder at the end if you feel it needs it.