edit: move windows path code to common file

Move the code handling Windows paths from virt-edit to a common file,
so that can be shared by various tools.

Mostly code motion, with a minimum touch (the additional guestfs_h*
parameter in mount_drive_letter) to make it build and work.
fish, edit: specifies whether mount Windows as readonly
fish, edit: move the exit-on-case-sensitive-error behaviour to virt-edit

Do not unconditionally exit if guestfs_case_sensitive_path, but let
windows_path still return null. Make virt-edit then check for that, and
eventually exit on its own.
cat: use the common Windows path handling code
fish: isolate file editing (w/ editor) code in own file

Move the implementation of file editing using editor to an own file, so
that can be shared by different tools.

Mostly code motion.
fish: edit: improve the editor execution

Dynamically allocate the buffer for the command, and check also its exit
status.

Improvements taken from the current implementation in virt-edit.
fish: edit: bring backup extension to file editing w/ editor

Bring the backup extension feature from the perl-like file mode
implementation, although currently not making use of it.
fish: edit: return 1 for unchanged file

Change the return value of edit_file_editor to 1, in case the editor did
not change the (temporary) file.
fish: edit: bring the fast-time-edit protection

Bring from virt-edit the small hack of putting the ctime of the
temporary file few seconds back to notice file changes also on fast
editing.
fish: edit: add perl file editing

Add the perl file editing, mostly based in the virt-edit implementation.

This introduces a mild code duplication with edit_file_editor; will deal
with it in a later commit.
edit: switch to common editing functions

Switch virt-edit to the common edit_file_editor and edit_file_perl.
fish: edit: add verbose parameter
customize: use the common perl file editing code

Wrap edit_file_perl to OCaml, and use it instead of the OCaml version
of it.