Use u8 vecs, not strs. Paths are not always utf8.

Since paths are not always utf8, we shouldn't be using `str` to represent them.  I thought about using the newly rewritten `Path`, but I think that's too high-level and makes too many assumptions that might not be valid for all use cases.  Better to use `[u8]`.

It's annoying to need the unfortunate `logstr` function, which is a workaround to mozilla/rust#8968.  Hopefully that can go away when the rust issue is taken care of.