ARROW-12337: [Rust] add DoubleEndedIterator and ExactSizeIterator traits
ARROW-12337: [Rust] add DoubleEndedIterator and ExactSizeIterator traits

This PR implements the traits `DoubleEndedIterator` and `ExactSizeIterator` for the arrow array iterators. For the trait `ExactSizeIterator` this is an indication of the types system that their size is known, and `DoubleEndedIterator`  make them iterable in reverse order. Both include the improve of the iterators.

Regarding this, I notice that the iterators check bounds twice.

```rust
    fn next(&mut self) -> Option<Self::Item> {
        let i = self.current;
        if i >= self.current_end { // first bounds check
            None
        } else if self.array.is_null(i) {
            self.current += 1;
            Some(None)
        } else {
            self.current += 1;
            Some(Some(self.array.value(i)))  // second bounds check in `array.value`
        }
    }
```

In some implementations `self.array.value` includes a second bounds check. Shall I propose a PR that uses `self.array.value_unchecked`? This is safe as the bounds are already checked.

Closes #9994 from ritchie46/more_iterator_traits

Authored-by: Ritchie Vink <fc19543d6b0465ef8ec4a8f998d9b13cff10e422@gmail.com>
Signed-off-by: Andrew Lamb <02e0a999c50b1f88df7a8f5a04e1b76b35ea6a88@nerdnetworks.org>

cpcloud/arrow,apache/arrow,apache/arrow,apache/arrow,cpcloud/arrow,kou/arrow,apache/arrow,laurentgo/arrow,laurentgo/arrow,cpcloud/arrow,icexelloss/arrow,laurentgo/arrow,icexelloss/arrow,icexelloss/arrow,apache/arrow,kou/arrow,wesm/arrow,icexelloss/arrow,kou/arrow,icexelloss/arrow,kou/arrow,kou/arrow,cpcloud/arrow,wesm/arrow,kou/arrow,wesm/arrow,cpcloud/arrow,apache/arrow,kou/arrow,icexelloss/arrow,kou/arrow,apache/arrow,icexelloss/arrow,wesm/arrow,wesm/arrow,cpcloud/arrow,apache/arrow,wesm/arrow,wesm/arrow,icexelloss/arrow,apache/arrow,cpcloud/arrow,icexelloss/arrow,kou/arrow,kou/arrow,laurentgo/arrow,cpcloud/arrow,wesm/arrow,apache/arrow,cpcloud/arrow,icexelloss/arrow,laurentgo/arrow,wesm/arrow,apache/arrow,laurentgo/arrow,laurentgo/arrow,apache/arrow,wesm/arrow,laurentgo/arrow,cpcloud/arrow,icexelloss/arrow,laurentgo/arrow,laurentgo/arrow,icexelloss/arrow,kou/arrow,wesm/arrow,icexelloss/arrow,cpcloud/arrow,wesm/arrow,kou/arrow,laurentgo/arrow,icexelloss/arrow,laurentgo/arrow,kou/arrow,kou/arrow,laurentgo/arrow,apache/arrow,cpcloud/arrow,wesm/arrow,laurentgo/arrow,apache/arrow,cpcloud/arrow,wesm/arrow,cpcloud/arrow,laurentgo/arrow