A class that handles finding modules, importing them and calling a patch method.
This class is not designed to be used itself - instead, subclasses should be created that implement the patch method.
Module finding method. It tells Python to use our hook only for the package we want.
Module loading method. It imports the module normally, and then calls the patch method to wrap the functions we need.
patch is implemented by subclasses