Library and DesktopGame unit tests + DesktopGame refactoring

Still work in progress.

Things I want to do before merging:

- [x] Emerge a desktop file parser interface (implemented by both strict and permissive parsers)
- [x] Extract the remaining parser fallback logic from `DesktopGame.get_info()` and `get_exec()`
- [x] Choose between `Broken` and `Invalid` for `DesktopGame` test names
- [x] DRY `DesktopGenresConverter`
- [x] Find a better solution for the `Desktop` subdir: I wanted to use a namespace, but there is already a `Desktop` class (which is actually a parser) => rename existing `Desktop` class to `DesktopGameFormatParser` ? Or move it to the new namespace, like this: `Desktop.GameFormatParser` ?
- [x] Decide whether I should use an `I` prefix for interfaces
- [ ] Extract some `remove_extension(filename)` utility method
- [x] Rename and refactor `NewLibraryTest` and `AddGameTest` (to match the conventions used in `DesktopGameTests`)
- [ ] Use the right test double terminology at the right place
- [x] Move `ILanguages` to its own file (and rename it ?)
- [x] Move `IGameFactory` to its own file
- [ ] Rename `Library.systems` to `game_factory`
- [ ] Only parse `*.desktop` file once in `StrictDesktopGameParser`
- [x] Get rid of the `desktop_file_is_valid` sensing variable
- [x] DRY test cases

As discussed, I will also:

- [x] Remove .*.swp from .gitignore
- [x] Comment about Steam's broken `*.desktop` files in the permissive parser
- [x] Do not prefix interfaces with `I`
- [x] Unique `Library` constructor with optional `languages` parameter (assigned in `construct` block when missing)
- [x] Add the missing tests for new classes
- [x] Make old classes tests isolated as soon as possible

Please note that I don't share the same `GameInfo` instance between strict and permissive parser (you were sharing it before).

But I don't think it changes anything since :
- in case of `DesktopAppInfo` failure, it was not modified in the `if` (aka *strict parsing*) branch, and went directly to the `else` (aka *permissive*) one.
- the instance was wiped out at the begining of every `get_info()` call

If you see something else to do before merging that is not in this list, please just tell me.