deque: Fix grow condition in add_front

Without this, it will hit the assert in fn grow after 32 consecutive
add_front.
deque: Add tests and bench tests

Add a test that excercises deque growing.

Add bench tests for grow, new, add_back, add_front, to expose how slow
these functions are.
deque: Speed up deque growth by a lot

Fix some issues with the deque being very slow, keep the same vec around
instead of constructing a new. Move as few elements as possible, so the
self.lo point is not moved after grow.

   [o o o o o|o o o]
       hi...^ ^.... lo

   grows to

   [. . . . .|o o o o o o o o|. . .]
              ^.. lo        ^.. hi

If the deque is append-only, it will result in moving no elements on
grow. If the deque is prepend-only, all will be moved each time.

The bench tests added show big improvements:

Timings before patch:

test deque::tests::bench_add_back ... bench: 41755 ns/iter (+/- 1023)
test deque::tests::bench_add_front ... bench: 18091 ns/iter (+/- 495)
test deque::tests::bench_grow ... bench: 4723935 ns/iter (+/- 73140)
test deque::tests::bench_new ... bench: 1440 ns/iter (+/- 9)

Timings after:

test deque::tests::bench_add_back ... bench: 236 ns/iter (+/- 6)
test deque::tests::bench_add_front ... bench: 215 ns/iter (+/- 9)
test deque::tests::bench_grow ... bench: 14007 ns/iter (+/- 318)
test deque::tests::bench_new ... bench: 1411 ns/iter (+/- 33)
deque: Implement FromIterator

So that deque can be used with IteratorUtil::collect()