Factored out general file system test code
Factored out common code in check/parse exceptions
Refactored exception system

Each individual exception type now has its own class instead of being a generic RuleParseException etc. This helps with distinguishing the exceptions programatically as well as separation of logic and presentation.
Added unit test for scanning Unicode filenames
Add unit test for 'report progress' facility
Bugfix: Progress reported incorrectly for FileScanner
Refactored FileScanner core
Created file_utils unit and moved enum_partial_paths there
Renamed FileReference._test_repr()
Bugfixed sorting of scanned files
Added unit test for scanning errors due to permissions
Test for fatal errors in FileScanner (e.g. non-existent base path)
Created separate category for exceptions attached to file refs
Made FileScanner into a function, scan_files()

This is part of an initiative to get rid of functors and other Java-isms.