Added iter2/map2/rev_map2/fold_left2/fold_right2.

This round of additions was tricky. Particularly, adding the borrowing
versions of the functions taxed my understanding of lifetimes. I wanted
to use `combine` followed by an iter, map, rev_map, etc., but this didn't
work out. I couldn't use `combine` because the `List<A>` didn't support
clone. I also couldn't use `combined` because I would be moving out of
the lists.

I had a good idea to turn a `List<A>` to a `List<&A>` and then use
`combined` on that list, but doing something like `l.map(|x| x)` didn't
have the proper lifetimes. I realized then that my lifetimes for most of
my functions aren't right. The function passed to `map` as it is now
expects an argument with a lifetime that does not last as long as the
underlying list. I think this a bug, and will require a significant
amount of change to fix :(. I may never fix it, as it's not a
deal-breaker.