Os refactoring

This refactors the representation of operating systems, so they can be used in the code in a more native way. It simplifies code and tests.

There are still a few things, which should be further refactored:

* The list of available operating systems is hard-coded in the SystemDescription class. This needs to be made dynamic and based on the available Os subclasses.
* The `check_build_compatible_host` method is currently in the unspecific `helper.rb` file. It should move to a more specific place, probably to a `LocalSystem.can_build(os_object)` method.
* The formatting of the error message for incompatible build hosts could be improved by adding some line breaks and putting out the list of supported systems as an actual list
* The `Os` objects are currently returned from the `SystemDescription.os_object` method. This should be merged with the `SystemDescription.os` method, which returns the `os` scope. This is the most challenging part. We need to introduce actual rich data model classes for this.

All these refactorings are out of the scope of this pull request.

This would then not test most of the code of the `os_object` method as it simply would fake its return value. I think the  `OsInspector.inspect` is the natural place to mock as it represents the boundary to the outer system. The mock as it is implemented makes sure that there is seen a well-defined environment from outside of the function, which is tested.