Heat the oil in a large heavy-bottomed pan or Dutch oven over medium heat. Add the onion and 1/4 teaspoon of the salt and cook, stirring every minute or so, for 10 to 12 minutes, until soft and deep golden brown. Lower the heat slightly if the edges start to scorch.
Add the garlic, ginger and green chili (if using) and cook for 1 minute, stirring, until fragrant.
Turn the heat to medium-low and add the cumin, coriander, turmeric, paprika or chili powder and 1 teaspoon of the garam masala. Stir for 30 seconds so the spices toast in the oil. If they start to stick, add a tablespoon of the measured water.
Pour in the crushed tomatoes and simmer, stirring often, for 6 to 8 minutes, until the sauce thickens into a paste and you see oil glistening around the edges.
Add the chicken and the remaining 1 teaspoon salt. Stir to coat every piece in the sauce and cook for 3 minutes.
Pour in the rest of the water and bring to a gentle simmer. Cover, turn the heat to low and cook for 12 to 15 minutes, stirring once or twice, until the chicken is tender.
Stir in the coconut milk and simmer uncovered for 3 to 5 minutes, until the sauce is creamy and coats the back of a spoon. Check the thickest piece of chicken: it should read 165°F / 74°C on an instant-read thermometer and show no pink in the center.
Take the pan off the heat. Stir in the remaining 1/2 teaspoon garam masala and the lemon juice, then taste and add more salt if needed. Scatter with cilantro and serve hot.