* Store experiences directly in the commit object
This way we can avoid the huge dict of dicts of dicts mapping commit hashes to experiences
* Use tqdm to see progress during seniority calculation
* Make 'first_commit_time' a simple dict
* Store seniority directly in the commit object
* Refactor things to avoid multiple sums and set updates
* Store max and min values too for experiences
* Store touched files and directories too as part of the commit data
* Remove useless default value for files_modified_num
* Use f-string instead of string concatenation for feature names
* Add more features about experiences (average, maximum, minimum, number of elements)
Fixes#370
* Test repository.get_revs function
* Test repository.get_directories function
* Split _hg_log function called by ProcessPoolExecutor in two to make it more easily testable
* Add logging when downloading file->component mapping
* Move the experience calculation code in a separate function
* Don't break experiences when there are days without commits
* Add tests for repository.calculate_experiences
Fixes#382
* When a commit changes multiple files in the same component, don't overcount the experience
The commit itself was being considered as a previous commit touching the same components