Heat olive oil in large skillet and saute onions and garlic over low heat until they are translucent and soft, about 8-10 minutes. Add tomatoes, basil, oregano, cumin, and black pepper, and cook over low heat, partially covered, another 10-12 minutes. Let cool, then blend in a processor until smooth. Set aside.
Bring water to a boil in a large pot. Add chicken, bay leaves, and epazote. Water should cover chicken by an inch or so. Skim off foam and fat that surface in first 5 minutes. Add reserved puree and tomato paste and cook; partially covered, with liquid at rolling simmer, for another 20 minutes. Transfer chicken to a platter. When cool enough to handle, remove skin and bones, then shred.
Add peppers, carrots, and celery to broth and cook over low heat for 5 minutes. Add zucchini and cook an additional 5 minutes. Remove vegetables from broth with slotted spoon. Salt broth to taste.
Peel and parboil potatoes. Then dice and saute in a little olive oil until brown.
Place a scoop of vegetables and a heaping tablespoon of potatoes in a large soup bowl. Next, add tortilla strips, spinach, shredded chicken, avocado, and cheese. Pour piping-hot broth over everything and serve immediately.