Features:

- Added a pre-processor step to mod solving.
    - This greatly reduces the time taken for Sat4j to optimise the final mod set (pick the newest possible versions of every mod)
        - Previously this was capped at 5 seconds.
    - Added a warning when picking between two mods when we don't have any reason to pick one over the other.
        - This can happen when two mods provide each other, or two mods provide the same version of a third mod.
    - Added a system property to disable this "loader.mod_solving.disable_pre_processor"
    - Added a system property to explain what this pre-processor is struggling with (partially simplified mod sets)
        - "loader.mod_solving.print_results" prints unsolved sub-problems, and the final chosen options.
        - This is an alternative to the very verbose "loader.debug.mod_solving" property.
    - Made the log line "Aborted mod solving optimisation due to timeout" always print when it happens.
- Removed the "transformed-mod-" prefix from virtual mod filesystem names, as it confused a lot of people.
- Added the mod version after the mod id to filesystem names.

Bug Fixes:

- [#382] Fixed the virtual file systems not being thread-safe
- Fixed QuiltClassPath not being thread-safe. This sometimes caused a number of odd issues
    when mods tried to access resources during early loading.
