Heat olive oil in large frying pan 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 food processor until smooth. Set aside.
Bring water to the boil in a large pot. Add chicken, bay leaves and epazote. Water should cover chicken by about 2.5cm. Skim off foam and fat that surface in first 5 minutes. Add reserved puree and tomato puree and cook; partially covered, with liquid at rolling simmer, for another 20 minutes. Transfer chicken to a serving plate. When cool enough to handle, remove skin and bones, then shred with two forks.
Add peppers, carrots and celery to stock and cook over low heat for 5 minutes. Add courgettes and cook an additional 5 minutes. Remove vegetables from stock with slotted spoon. Salt stock to taste.
Peel and par-boil 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, avocados and cheese. Pour piping-hot stock over everything and serve immediately.
Epazote can be purchased in Hispanic speciality shops or online.