Updated ModelValidationResult and ModelValidationError

Instead of errors being represented by a simple
`IList<ModelValidationError>` structure, it is not stored in an
`IDictionary<string, IList<ModelValidationError>>` structure. The key is the
name of the property that the error represents.

The error message formatter has also been updated from `Func<string,
string` to `string`

Last, the `ModelValidationError` can now implicitly be cast to a string