Consolidate exception classes

Our rationale for exception classes is to have exception classes for
cross-cutting concerns (system description, connection erros,
command-line) and then for specific areas (building, kiwi export,
deploying, inspection). Inside these we try to not introduce too many
similar classes.

From the name this is not clear at all. We should at least document this. Actually we should probably have documentation of all exception classes, so that people know how and especially when to use them. But this is something we could also do in a later pull request.

Do we have a place where both exceptions can happen and we need to handle them differently? If not I would suggest to get rid of the `MissingSystemRequirement` and just use the `MissingRequirement` for both cases.