Fix type comparison on OSX
UnknownArrayHandle compares std::type_index objects to check whether a
requested type is the same as that held in the array handle. However, it is
possible that different translation units can create different but
equivalent std::type_info/std::type_index objects. In this case, the
== operator might return false for two equivalent types. This can happen
on OSX.
To get around this problem, UnknownArrayHandle now does a more extensive
check for std::type_info object. It first uses the == operator to
compare them (as before), which usually works but can possibly return
false when the correct result is true. To check for this case, it then
compares the name for the two types and returns true iff the two names
are the same.