Fix for Issue #17547

ActiveModel built-in validators should use the custom message passed in as :message option
@egilburg Thanks for your comments. I will add test coverage.

Re: Should do respond_to?(:call) or is_a?(Proc) instead of always trying to call and then rescuing from exception.

This try-catch idiom is widely used in other communities like in Python. It may have advantage in performance over the other way of checking respond_to? or is_a?. Intuitively, try-catch will be more efficient than if-respond_to, when option[:message] is actually a Proc. And try-catch will be as efficient as if-respond_to, when option[:message] is a symbol or a string.