Put beans in a 6- to 8-qt. pot and add enough water to cover by 2 in. (The pot should be large enough to allow plenty of air space over the beans and water, so steam can circulate.) Add onion. Bring to a boil, covered, over high heat.
Boil beans, uncovered, 10 minutes. Reduce heat to a bare simmer and cook, lid barely ajar, until beans are starting to get tender (from 20 minutes to 2 hours, depending on the age of the beans). Add epazote, lard or oil, and 2 tsp. salt.
Cook, lid barely ajar and adding enough hot water to keep beans covered by about 2 in., until beans are very tender but not broken, 15 minutes to 3 hours. Season to taste with salt.
Eat beans immediately or let cool in their broth. If eating right away, remove onion and epazote and ladle into warm bowls with some broth.
*Soak the beans in water overnight to shave off cooking time. If you don't presoak, give the beans more time to cook--at least 30 minutes more (it varies depending on the freshness of the beans).