Add Interleave iterator

@sfackler was interested in having this adapter, so I hacked it together.
The upper bounds on these two cases may be unnecessarily high by 1. you're unconditionally adding 1, but you really only should add it depending on the value of `off_by_one`.

```rust
    (Some(x), None) => x.checked_mul(&2).and_then(|x| x.checked_add(&(1 - off_by_one))),
    (None, Some(y)) => y.checked_mul(&2).and_then(|y| y.checked_add(&off_by_one))),
```

You could even simplify this to `calc_size()` replacing `None` with `uint::MAX`. It will come up with the same result.

```rust
    (Some(x), None) => calc_size(x, uint::MAX, off_by_one),
    (None, Some(y)) => calc_size(uint::MAX, y, off_by_one),
```