Added an implemention of ArrayDeque, as well as unit tests

This includes the implementation for ArrayDeque (which took much longer to get accurate than I had hoped for).  I also used this opportunity to reduce code duplication around other queue/deque implementations.

Please see in-line comments for interesting notes.