Check for the variable you actually need to use

The if checks for a variable, but the body of the if then uses a different
one. This works fine until an exception is raised between the
initialization of the two variables, causing the one controlling the if to
be initialized but not the other one.
Migrate Generator to Use ExternalModuleEnumerator instead of kernel-lsext

Generator no longer needs to spawn a child process; now it can use EME
directly, at the cost of one additional method in the latter.
Fix output redirection of child processes

I accidentally assumed that passing None (default) as a std* argument to
one of the subprocess methods would redirect to /dev/null; what it really
means instead is “use the parent process’s descriptor”.

Now a single descriptor to /dev/null is created in Generator.__init__(),
and used in all subprocess calls that need to silence the child process.