Fix empty() to ensure it also removes textNodes; recursive removeData on empty