Handle non-ASCII filenames

As long as they're valid in your locale.

Solution by @myint from #24, but with added tests and an additional
charset decoding fix in run().

Closes #23.