Changed the core breadth-first data type

Previously it stored both the iter function and the current iteration
count in each recursive element of the linked list, but that was
potentially inefficient and certainly redundant since a linked list
itself can represent a number---all we need is the offset!

To counter this, the data type was split into two pieces, a base-plate
`Closed` which holds the iter function and the current offset (initially
0, of course) and the old linked list containing only a HashSet and the
next element.

Additionally, Unchanging was given a reference to the last HashSet as
well to simplify some functions.