Fix handling of required payload.

A payload that is required will now throw an appropriate exception regardless of if a conversion is required or not.

`isEmptyPayload` now takes the payload instead of the `Message` so that both the original payload and the converted payload, if necessary, share the same logic.

JSR-303 validation is now consistently applied.