Fix exception handling in Receiver#flunk

- Allow storing exceptions without instantiating them, because the class may not be available to the process running Ruote (remote process running ruote-resque for example)
- Reintroduce receiver.flunk(workitem, e)
- Better outline the different cases

I don't think of any case where we really need to instantiate the exception, except maybe a custom exception with multiple parameters, so I kept this part as a legacy.