Port kernel-lsext to Python

Make kernel-lsext easier on the eyes than the large awk script that
dominated the file.

Sadly, the improved readability leaves quite some speed on the table.

Shell version (sh + find + awk):
$ time kernel-lsext -f -w -m -p >/dev/null
real	0m0.492s
user	0m0.467s
sys	0m0.017s

Python version:
$ time ./kernel-lsext -f -w -m -p >/dev/null
real	0m1.355s
user	0m1.340s
sys	0m0.010s

That’s a 175% increase in execution time, or 2.75 times as slow.

The up-side is that this will enable kernel-gen, once also ported to
Python, to use the new class ExternalModuleEnumerator directly, without
having to spawn a child process and parse its output as it does now.