Remove any dry brittle skin on the onions, put the onions in a small baking dish, root ends down, and rub with oil. Add 2cm of water to the dish. Cover with foil and bake for about 1½ hours, until tender. Let cool slightly.
Meanwhile, heat a large fry pan. Add the spinach in batches, tossing until wilted. Transfer to a colander and squeeze out the water. Coarsely chop the spinach.
In the same pan, cook the lamb over moderately high heat, breaking it up, until no pink remains.
Pour off all but 1 tablespoon of the fat and add the smoked paprika and cinnamon. Cook over moderately high heat for a minute, stirring.
Stir in the spinach. Transfer the lamb filling to a large bowl.
Stir in the bread crumbs, gruyère, ¼ cup of the beef stock and ½ cup of the crushed tomatoes.
Cut the top and bottom off the baked onions (about 1cm). Separate the layers, trying not to break them. You will need 10 onion cups: some large, some medium and 2 small.
Finely chop enough of the onion scraps to make ½ cup; fold into the lamb filling and season with salt and pepper.
Stand the onion cups in a buttered medium baking dish. Season the insides with salt and fill with the lamb.
In a large pan combine the cream with the remaining ¾ cup of beef broth and the remaining tomatoes and bring to a boil. Pour the sauce over and around the onions.
In a bowl, combine all of the ingredients. Mound the topping on the onions. Cover with foil and bake for 40 minutes, until hot.
Switch the oven to Grill, and grill for 5 minutes, until the topping is crisp.