This butter chicken tastes just like the kind you get at an Indian restaurant - maybe even better!
Place yogurt in large bowl. Whisk in garlic, ginger, garam masala, lime juice, curry paste, paprika, cumin, coriander and salt. Add chicken to bowl and turn to coat; cover and refrigerate for 24 hours, turning occasionally.
Place chicken in medium roasting pan, cover and roast in 400°F oven until no longer pink inside, about 30 minutes (or more if breasts have bone in them). Transfer to platter and cover with foil, leaving leftover marinade in pan.
While chicken is in the oven make the sauce:
In large skillet or saucepan, heat oil over medium heat. Fry onion until softened and browned, about 5 minutes. Add garam masala, paprika and curry paste; cook, stirring often, until fragrant and beginning to stick to pan, about 5 minutes. Add tomatoes and scrape up brown bits from bottom of pan. Mash tomatoes.
Simmer until spoon or spatula pulled across bottom of pan leaves gap that fills in slowly, about 15 minutes. Let cool slightly. In food processor or blender, purée until smooth. (This sauce can also be made ahead. If so, let cool to room temperature then cover and refrigerate for up to 24 hours.)
Pour sauce back into saucepan along with leftover marinade from roasting pan; bring to boil over medium heat. Add cream, and butter a few pieces at a time, cooking just until butter is melted. Pour over chicken. Garnish with cilantro.