Better expected failures

``unittest.expectedFailure`` is a bit too generous. It will happily accept any exceptions, which means it can hide genuine coding errors (and indeed typos in tests - see patch). This PR proposes to replace it with a dedicated context manager when we want to test that something isn't supported in nopython mode. I'm hoping for comments and feedback.