Heat olive oil in a large, heavy-bottomed pot over medium low heat. Add onions and cook until translucent, stirring occasionally. Add garlic and sauté for 1 minute. Then add cumin, paprika, and dried basil and stir. Add carrots, red bell pepper, and celery and cook for about 5 minutes, stirring occasionally. Add tomatoes and allow mixture to come to a simmer. Then add vegetable stock, salt, and pepper and stir well. Bring the soup to a boil, then lower the heat and simmer covered for 45 minutes, or until the vegetables are tender. Use an immersion blender to puree the soup until it is smooth. Alternatively, you can puree the soup in smaller batches using a food processor or blender (be careful when blending hot liquids) and then return the pureed soup to the pot. Once pureed, add in coconut milk and stir. Serve with optional fresh basil, croutons, or cheese and enjoy! This soup also freezes well for up to six months -- if you are using this option, leave the coconut milk out until you are ready to reheat it.