Services and plans have human-readable errors

validates_url can now take an optional message, which defaults to :url
like before

[#61862446]