tuples: Adds Tuple, Pair and Trio

Java is crying out for tuples, but they're annoying to write since
there's no way to have a variable number of generic type arguments,
which is why this patch only provides Pair and Trio, along with a
comparable version of each.

For the Tuple base class Arrays is used for hashCode, toString and
equals overloads.

A small factory is provided to ease the burden of generic arguments,
with overloads which should select the correct type of Pair/Trio to
construct depending on the arguments provided. i.e. supplying
comparables will give you a comparable Pair or Trio as appropriate.