Deal with columns with weird names

Since the contents of a CSV field are essentially free-form text,
anything can be in that header line.  Instead of hand-picking a few
characters that will get transliterated to an underscore, transform
everything that doesn't belong to a very well defined set of characters.

We could so something more sophisticated here, like Unicode folding, but
I think for the purpose of a tool like textql this suffices.

Also, no need to match an then replace.  We can simply replace
unconditionally, and if nothing gets replaced, we get the same thing
back.