Grate 1 piece of ginger into a large zip top bag. Add the garlic, salt, pepper, cilantro, lemon zest, lemon juice, 1 tbsp yogurt and 1 tbsp oil. Add the chicken, press out as much air as possible and seal. Set aside (at room temperature) to marinate while proceeding.
Heat the remaining oil in a large skillet over low heat. Roughly chop the remaining piece of ginger and add it to the oil, with the onion. Cook gently 10-15 minutes until well caramelized and almost mushy. Add chili powder, garam masala and turmeric; stir well. Cook 2-3 minutes to bloom and blend the flavors. Season with a generous pinch of salt and scrape mixture into a bowl; set aside.
Increase heat to medium-high; empty the zip top bag into the skillet. Cook, turning occasionally, until golden brown and cooked through but still tender. Return spice mix to pan. If using cream, add it at this point. If not, add flour then yogurt. Stir in tomato paste. Simmer 5 minutes.
Adjust seasoning with salt, pepper or lemon juice if needed. Serve with basmati rice or naan.