Heat oil in a large saucepan over medium heat. Add onion and cook, stirring frequently, until tender, about 6 minutes. Add beef, in batches if necessary, and cook, breaking up with a wooden spoon, until browned. Add chili powder, cinnamon, cumin, allspice, cloves, bay leaf, chocolate, beef broth, tomato sauce, cider vinegar, and red pepper. Stir to mix well. Bring to a boil. Reduce heat to low; cover and simmer 1 1/2 hours, stirring occasionally. It is the best if you now refrigerate overnight. Remove the bay leaf. Reheat gently over medium heat. Serve over hot, drained spaghetti. Top with shredded cheddar cheese.