Use raises as context manager instead of a method decorator.
This clearly identifies which code part is expected to raise
an exception. Related to Issue #1128
In case of an error the real valuable information is often
somewhere in the package manager output that does not get
exposed to the users console by default. The error message
we provide should tell users how they can get further details
such that they know how to find the real cause of the problem.
This patch enhances the error message in that regard.
nose is no longer maintained, thus we have to move to another
testing system. This commit updates the tox setup and all tests
to use pytest instead of nose.