Derakon found an infinite loop. Oops. Fixed.

For specific maze sizes, we can run into an issue where q->head==0 and q->tail == q->size, which is actually empty because q->tail should've wrapped but shows up as there apparently being q->size elements left.
Also, we should handle duplicate goal positions without anybody noticing.
I've altered the maze in cmap.py so that it shows the issue off, and tries duplicate goals.
(a test position inside the wall is silly, no)