Melt butter in heavy large saucepan over medium heat. Add leeks and shallots or onion and sauté until soft, about 5 minutes. Add asparagus and stock; bring to boil. Reduce heat to medium, cover and simmer until asparagus is tender, about eight minutes. Add spinach, cover and simmer until wilted, about 4 minutes. Add the parsley. Puree the soup until smooth. (See headnote.) Shift the soup into a large bowl, season with salt, pepper and cayenne to taste. Cool slightly, then cover with plastic wrap and chill until cold about two hours or up to one day.