That's a lot of refactoring... looking forward to merging that
I can always help with this, reorganize commits in that way two biggest offenders will be first, and then merge it my self with your branch.
Overall I did this refactors to simplify work in future, right now in some cases same logic is spreed in multiple of places and if you want alter it you would need modify each place separately (example could be unloading vehicles). Even worse, sometimes each place do not work in same way.
Another problem I fix is ineffective code, like using `std::string` in rules classed interfaces and then searching for correct object in `Mod` object.
Problem is that is very costly to search map using strings (`2 * log(n)` memory visits, that is huge) and result will never change. simply better is to cache relation at mod load, with this access to relation will be lot faster and use less memory. Another benefic is that error will be generated at load not when wrong relation is used during playing. This will be big grain for mod creators too.