Internationalization improvements:

* New algorithm for determining the error code to use for client-side error messages. Instead of approximating the same error codes that grails uses, we now use the same codes as grails. This allows code that uses server-side validation using messages in the message bundle to use the same codes for messages on the client and the server.  For example, previously, a message with the code className.propertyName.minSize.notmet would be successfully retrieved for a constraint violation of the minSize constraint on the server, but would not be used for client-side validation. The useLegacyMessageCodes setting can be used to get the old behavior.

* For remote validation, there was a buggy attempt to avoid sending the error message if it was "known".  The problem was that just the default message code was checked for the constraint name instead of the message code actually used.  We now just always lookup the message rather than attempting to optimize.

* Allow custom validators to have their client-side javascript validation function name differ from the server-side constraint name as is the case with the standard grails constraints.

* Use the default error code, default error message, and failure code when generating error messages for custom constraints.