docs: Update package installation instructions

Update supported Ubuntu and Fedora versions
Fix minor flake8 errors
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.
windows: Reset the password when customizing

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.
windows: Detect if the media 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