Add tuple support with protocol v2 (JAVA-362).

Based on patch submitted by Robert Stupp (initially for v3).

One thing I've added an am a bit unsure of is `TupleValue.of` which takes values directly, deducing data types from the Java classes. This is subject to the same limitations as `DataType.serializeValue` (mapping is not bijective, cannot deduce parameters for empty collections).