Field validation for item model (7616, 7627)

This introduced field validation for the item model.  It addresses tasks #7616 and #7627.

This addresses the following problem:  Before these changes, if item views encountered unexpected data types, they would fail and show the user an error message.  Search result views that included items with unexpected data types would also fail and show the user an error message.

This new code attempts to catch unexpected data types and fail silently so that the user experience is not disrupted. For each item field, the model validates that it is returning a string, an array of strings, or a valid URL.   To alert the developers of the unexpected data types, messages are written to the error log.  I also added comments to code detailing the data type that is expected from the API for future ease/debugging. 

It would also be possible to check whether or not URLs are live (as opposed to checking whether the format of the URL is valid).  This could be a plus for user experience, but may slow down page load time as each validation would involve sending a GET request to the URL and checking for a 200 response.
Should we consider using an 'Item' factory instead of populating this data manually for each test?

I'll be glad when we are using factories across the board, but I'm open to discussion about whether now is the time to bring them into the frontend.