Sort through the beans and discard any misshapen beans or stones. Rinse well. Place the beans in a saucepan and add the water. Bring to a boil, reduce the heat to medium low, cover and simmer until the smallest bean is cooked through and creamy inside, about 1 ½ hours. Remove from the heat and set aside.
In a large saucepan over medium heat, warm the vegetable oil. Add the onions, salt and pepper and sauté until the onions are lightly browned, about 10 minutes. Add the garlic and sauté for 1 to 2 minutes longer. Add the beans and their liquid and the stock or water. Bring to a boil, reduce the heat to medium and simmer uncovered, stirring occasionally, until the beans start to break apart, 20 to 30 minutes. Remove the beans from the heat and let cool slightly.
For the salsa:.
In a bowl, stir together the tomatoes, onion, cilantro, lime juice and salt and pepper to taste. Cover and refrigerate until you are ready to serve.
Working in batches, transfer the bean mixture to a blender and puree until smooth. Transfer the puree to a clean saucepan and reheat over reheat over low heat, stirring frequently, until hot. (If not serving immediately, keep warm over very low heat, stirring often).
Ladle the soup into warmed shallow bowls and top each serving with a spoonful of salsa and a dollop of crema or sour cream.