Heat the oil in a large pan over medium heat. Add the black peppercorns, black and green cardamom pods, cloves, cinnamon, and mace; 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 tbsp water to fine paste. Add the garlic and ginger mixture to the lamb mixture, stir 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, 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 further for 7 to 8 minutes, stirring continually and adding splashes of water as necessary, until the volume of the 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 before serving.