Make it possible to expect std::exception

Macro ensure_THROW would not handle std::exception nicely, as it was assumed to
be an unexpected exception. Specifying is as the expected exception type caused
compilation warning, because the same try-catch block was handling both cases.

I've fixed that by using a nested try-catch block. The inner one is supposed to
check if the proper exception type is thrown. The outer block catches unexpected
exception types.