Step 1Bring the milk to boil in a heavy-bottomed pan, stirring occasionally so that it doesn't burn. Reduce the heat, then very slowly, start adding the lime juice while stirring the milk constantly. Continue adding lime juice in a slow trickle until the milk begins to curdle, that is, the curds separate from the whey, which turns from a milky white to a watery gray. If there is still some lime juice left at this point, stop adding it. Remove the pan from the heat. Place a cheesecloth over a large bowl, pour the milk into the cheesecloth and strain. Reserve 3 1/2 cups of whey (the liquid) and set it aside. (You can use water in place of the whey.)
Step 2Gather up the corners of the cheesecloth and tie them together about 3 inches above the curd, fashioning a bag out of the cloth. Hang the bag above the sink or a bowl for about 30 minutes. Gently squeeze the bag, take it down and place it between 2 cutting boards. On the top board, place a heavy object weighing about 5 pounds (such as a saucepan filled with water) for about 2 hours until the layer of paneer becomes about 1/2-inch thick and--this is key--firm. (If the paneer is not yet firm, place the bag between the cutting boards, the weight on top, and put the entire apparatus in the refrigerator for a couple of hours.) Remove the weight. Untie the bag and remove. Cut the paneer into 1 1/2-inch cubes.
Step 3Heat the ghee or oil in a heavy-bottomed skillet over medium heat. When the ghee is hot, but not smoky, add the onions and fry, stirring frequently until uniformly golden brown, about 15 minutes. (For a superior-tasting dish, fry onions over the lowest possible heat, stirring occasionally, about 45 minutes.)
Step 4Add the ginger and garlic, stirring for a few seconds. Add the turmeric, coriander, cumin, ground chiles, salt, tomatoes and 1/4 cup of the reserved whey. Cook until the tomatoes are pulpy and the ghee/oil shows separately, about 5 minutes, stirring occasionally. Add the peas. Cook, stirring, about 3 minutes. Add the remaining whey. Cover the pan and cook over medium heat for 30 minutes, stirring occasionally. Add the paneer and simmer about 10 minutes. Stir in the garam masala.
Step 5Serve hot, garnished with cilantro.