Defensively checks that children exist in has_changes

Please review @cahrens @andy-armstrong 

@dan-f this should fix the issue you were having.
Nit: You aren't really checking that the parent's child exists-- you are checking that the item itself exists (I know the method recursively calls itself, which is where I think the comment comes from).