LoadModules attempts to load kernel modules, if necessary.
isLoaded must be a function that checks whether the modules are loaded. It may
be called multiple times. isLoaded must return an error to indicate that the
modules still need to be loaded, otherwise nil.
For each method of loading modules, LoadModules will attempt the load for each
of modNames, then it will call isLoaded to check the result - moving on to try
the next method if needed, and there is one.
The returned error is the result of the final call to isLoaded.