Fix File and Exception to handle paths correctly

Use `Path` to handle paths (instead of `String` and `:filename`)
Adds specs
Move path string conversion to `File.Error` or `File.CopyError`
Misc fixes for handling paths correctly

Replaces use of the `String` module for `char_list` conversion with
`Path` where appropriate.
Fix parsing of argv