Improve error reporting and update tests. 

1. Enhance nested model error tests: a) to ensure the missing key is listed in the userInfo; b) to check for errors in both arrays and dictionaries.
2. Propagate errors in nested models out (instead of re-generating a generic error) so that the correct error can be seen by the end-user.
3. Encourage invalid data errors to use more explicit messaging by requiring that a message is passed in.