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.

Most if not all of the other exceptions are pretty self-explaining to me. Personally I think separating local and remote requirements would make sense, even if they aren't handled differently in the code. But I can't come up with good names that would make it clear, so I'll just use `MissingRequirement` in both cases.