Support for rejecting messages.

You can now reject a message by throwing `MessageRejectedException`. I'm not a huge fan of using rejection for flow control, but I think that rejecting messages should be an exceptional thing you do, not something which you'll do _often_. What do you guys think of this?

This doens't solve the fact that a rejected message will be _retried_ instantly with another consumer. If you want to do that you're better off throwing a different exception and using a custom fault handler, which would put something on an error queue with a ttl or something.

/cc @cocowalla 
/cc @jamescrowley