Handle list deserialization errors

Before this change errors from deserializing lists of data may have been hidden due to repeated calls to .from_native overwriting the self._errors dict.

Now .from_native iterates over the list storing each error as a tuple in a list, each tuple looking like this:

(index, error_dict) where index is the index of the item with the error, and error_dict is the error dictionary returned when evaluating the individual item.

Single item deserialization works as before.