Catching all synchronous exceptions in Haskell, while re-throwing all asynchronous exceptions