Get rid of util::str::none_as_empty

Unlike an empty ~str, an empty StrBuf doesn't allocate.
Rework whitespace handling
wip