Grind all the spices for the spice mix in a grinder, and rub all over the lamb. Leave to marinate for four hours or more.
Heat the oven to 150C/300F/gas mark 2. Break up the garlic head with a rolling pin or pestle, and bash the cloves. Scatter in a large roasting tray, and add the onions. Wipe clean the chillies with a damp cloth, tear open and discard the stalk and seeds. Tear each chilli into four or five pieces and add to the tray. Pour in the stock, place the lamb on top and cover with foil. Roast for four hours, turning it over once or twice.
Test the lamb after three and a half hours: if it is still a little tough and chewy, leave it in for half an hour or so, until so tender it falls apart when the flesh is pulled away from the bone. Lift out the meat, and place, covered, in a warm place to rest.
Whizz the sauce in a food processor and place in a medium saucepan over a high heat to reduce until you have a nice thick sauce. Serve drizzled over the lamb.
For the elote: melt about 20-25g of the butter in a large saute pan and saute the onion and pepper until both vegetables are nice and soft.
Add the corn with the rest of the butter and turn the heat up. You will see that the corn starts to brown. Add the chillis and garlic and cook for another 2 minutes. Season and add a splash of water. Let this start to bubble then turn the heat down and leave it to cook for about 15 minutes. Remove to a plate and top with the sour cream. Scatter over the cheese and finish with the coriander. Serve with tomato & mint salsa, guacamole, pickled onions, & soft shell tacos!