Add tuples


Could alternatively put these in a separate `quiver.tuples` library if desired.

Can also increase (or decrease) the maximum tuple length provided (I only need length = 2 right now :) ).

Looking to add this so I can use it to represent Map pairs:

```dart
Iterable<Tuple2> pairs(Map map);
Map fromPairs(Iterable<Tuple2> pairs);
```

And I'd also like to use it to replace `IndexedValue`:

```dart
Iterable<Tuple2<int, dynamic>> enumerate(Iterable iterable);
Stream<Tuple2<int, dynamic>> enumerate(Stream stream);
```