Make sure tracebacks are always displayed correct

If an exception that we don't know how to handle gets thrown, make sure
the traceback is always printed in the command line. If the output of
the program is also saved in a log file, then make sure the traceback
gets printed there too.
Handle guestfs.launch() thrown RuntimeErrors

If launching the guestfs helper VM fails, the library will throw a
RuntimeError exception. Don't treat this as an unhandled exception.
Convert it to FatalError but preserve the error message.
Make sure wrapped text fits in the dialog boxes

When we wrap text to create a paragraph and print it in a dialog box,
make sure the lines will not get wrapped further by the dialog box.
Canonicalize distro & osfamily params in os_cls()

If the distro name as returned by libguestfs's inspect_get_distro was
redhat-based, since hyphens are not allowed in module names, importing
module redhat-based would create an ImportError exception, even if file
redhat-based.py was present. Although we don't have any redhat-based.py
module and the code will still correctly fall back to importing
linux.py this can be considered as a bug. In order to overcome this, we
replace the hyphens with underscores in the distro and osfamily names.
In the future, if we have to create a module for redhat-based distros we
will name it redhat_based.py.
Correctly identify Oracle Linux OSes

libguestfs prior to 1.27.9 will identify Oracle Linux as Red Hat
Enterprise Linux. Check for the presence of /etc/oracle-linux to
determine if the OS is Oracle Linux.
Add a context manager for opening hive files

Add a context manager in windows.py for reading and writing hive
files. Whenever a method needs to access the Windows registry it should
use this context manager.
Convert windows.py module into a package

As the windows module got bigger and bigger we had to break it into more files
Add sysprep params before init is executed

In add_sysprep_param __init__ decorator, add the sysprep parameters
before executing the init function. This is needed if we want to be
able to access the sysprep_params dictionary from within __init__.
Move winexe.py module inside the windows package
windows: Move code from Windows class to VM

Move all helper methods that control the Winodows VM from Windows to
VM class
windows: spit do_sysprep to reduce complexity

Add a new _exec_sysprep_tasks method that is called by do_sysprep and
hosts the actual code for executing the system preparation tasks
windows: Create a new registry module

This modules hosts the Registry class which contains all the registry
manipulation code previously hosted under the Windows class
Fix a bug in sysprep param handling in dialog_menu

If the needed sysprep parameters had all default values,
snf-image-creator would crash when trying to run the image
customization. This bug could not be triggered from the current os_type
classes.
Reset the password when configuring Windows

Don't ask the user to enter an Administrator password before cleaning up
a Windows image. Reset the password before starting the process and
assign the old value if needed at the end.
Detect if windows image is already sysprepped

Add code to check if the source media is a sysprepped windows image. If
so, don't allow it to be further customized