In a large pot heat the butter and oil together. Sauté the leeks and garlic, stirring, for 10 minutes. Stir in the sugar, vinegar and allspice and stir until sugar is dissolved. Add the cabbage. Stud the onion with the cloves and add to the pot along with the bay leaf. Pour in the stock and bring to a boil. Simmer, uncovered, for 45 minutes. Remove the onion and bay leaf.Stir in the ham (if desired) and the sour cream and reheat until hot, but not boiling. Season to taste with salt, pepper and the dill. Serves 8-10.