Optimize Tape implementation

Use a Zipper data structure to implement the turing machine tape to
achieve all operations (write a symbol at the head of the tape, move the
head to the left, and move the head to the right) in O(1) time.

The old implementation used a bitmapped vector trie, but it did not
perform write operations in constant time (and some move operations did
not perform in constant time either).