In a medium bowl, mix together the yogurt, lemon juice, garam masala, cumin, coriander and cayenne pepper. Add the chicken cubes and stir until evenly coated. Cover the bowl and refrigerate for at least 30 minutes.
Heat the oil in a large skillet over medium-high heat. Add the onion and cook until softened and lightly browned.
Add the garlic and ginger to the skillet; cook for 1 minute more.
Stir in the marinated chicken cubes. Cook for about 5 minutes or until chicken is cooked through.
Add the canned tomatoes with their juices. Reduce heat to low and simmer for 10 minutes.
Stir in the heavy cream or half-and-half; simmer for an additional 5 minutes.