Updated controller lookup by directory to use opendir()/readdir() instead of the RecursiveDirectoryIterator.  The code is more complicated, but its much faster and some may not have access to the RecursiveDirectoryIterator.  Also, added caching for the controller lookup to make it even faster.