Accelerate FileSelect processing
Often a command needs to be applied to a collection of files or directories. These may include files explictly named on the command line or files implicitly required based on a recursive directory traversal (typically indicated by the "-r" command line flag). The problem of determining which files to process is called fileselect processing.
File select processing may use patterns to identify files that should be included or excluded. These patterns may also be specified on the command line or may be read from a .gitignore file.
lib/fileselect/fileselect.cpp contains an implementation which handles standard include and exclude patterns from command line files and .gitignore files. However, it is too slow when applied to large source code collections such as the Linux source code. The principal problem is the cost of compiling .gitignore files, there may be hundreds of these files in a large source code base. Rather than using Parabix regular expression processing (which has very fast matching at the expense of high compile time), investigate whether other regular expression (or git glob) libraries could be used to improve performance.