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 remaining ingredients, except spaghetti and cheese. Stir to mix well. Bring to a boil. Reduce heat to low; cover and simmer 1.5 hours, stirring occasionally. 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.