Suggested by: marcel, imp
modeled on ethers(3) except that all functions are thread-safe. Reviewed by: simokawa