Make ArrayType comparable

Following
https://github.com/facebook/presto/issues/1816

A = B if they have the same cardinality and every element in A is equal to the corresponding element in B
A < B if
for some 1 <= k <= min(cardinality(A), cardinality(B)), A[i] = B[i] for every i < k and A[k] < B[k]
or, for every 1 <= i <= cardinality(A), A[i] = B[i] and cardinality(A) < cardinality(B)
I don't think this works. An element type (for example TimestampWithTimeZone) could have two different stack values which are equal, since types have a stack encoding (see the Developer Guide I started writing: https://github.com/facebook/presto/pull/1964). Instead you need to delegate to the element type's hash method and then combine the hashes