Upon thinking about this some more, perhaps `unescape_entity()` should actually just take a `&str`, containing the full entity. Let the caller figure out where the entity ends. This way you can avoid allocating a `StrBuf` internally and instead just slice the source string.