Special equipment: Cheesecloth
Make the paneer: Bring milk to a full boil in a 6-quart heavy pot, stirring occasionally. Add the salt, and lemon juice and remove from the heat. Gently stir around the edges as the milk separates and the curd forms in the center. Let sit for about 2 minutes.
Pour mixture into a colander lined with a triple layer of dampened cheesecloth. Gather up edges of cheesecloth, twisting gently to squeeze out as much liquid as possible. Wrap the cheese tightly in the cheesecloth and wrap in a kitchen towel. Transfer the package to a bowl and weigh down with a bowl filled with water or a large can. Let stand at room temperature until firm, about 1 hour. Pour off any liquid that has accumulated in the bowl and cut the paneer into 1/2-inch cubes.
Make the spinach: Cook spinach in 1/2 cup water in a large saucepan, covered, over moderately high heat until wilted and tender, about 2 minutes. Coarsely puree spinach, without draining, in a food processor. Set aside.
In a mini-chopper, puree the garlic and ginger into a paste with the remaining 2 tablespoons water. Set aside.
Heat the oil in a large nonstick skillet over moderately high heat until hot but not smoking, then brown paneer in 2 batches, gently turning to avoid breaking up. Using a slotted spoon, transfer the paneer to paper towel-lined plate, leaving the oil behind in the skillet.
Add the coriander seeds, cumin seeds, cloves, allspice, and cinnamon stick to the skillet and cook, stirring, until fragrant and the cinnamon stick unfurls, about 30 seconds. Add the onions and cook stirring, until lightly browned, about 5 minutes. Add garlic-ginger paste and cook, stirring, until fragrant and almost dry, about 2 minutes. Add tomatoes and cook, stirring, until softened, about 4 to 6 minutes. Add spinach puree and simmer sauce, stirring occasionally, until thickened and almost all of liquid is evaporated, 2 to 4 minutes. Add cream and simmer, stirring, occasionally, until thickened. Gently stir in paneer and salt and simmer about 30 seconds more. Divide among plates and serve immediately.
Paneer keeps, wrapped well in plastic wrap and chilled, for 3 days.