Make FileValidation much more dynamic

Instead of using a hard-coded "largest file signature" value (14) that would have to be changed in the code everytime a new file type is added, we automatically find the largest file signature with each new instance. This is done with the new setLargestFileSignature() (private) function.

The allowFileType(), disallowFileType(), disallowFileSignature(), and allowedFileTypes() functions have been added. allowFileType() allows file types to be dynamically added to the list of allo
wed file types (on that instance), disallowFileType() takes a string file type parameter and removes the file type(s) that match that string from the allowed types array, disallowFileSignature() is much the same as disallowFileType() but is a little simpler since there can't be multiple identical keys, and allowedFileTypes() returns an array (without file signatures) of all allowed f
ile types.