Use hash-map for reachable-neighbors
Use hash-map for unvisited-neighbors
Allow reachable-neighbors to work without walls
Use random-reachable-neighbor in generate, solve

random-reachable-neighbor works for both generate-maze and solve-maze so
there's no need to use the more general random-unvisited-neighbor for
generate-maze.
Use visited? for generate-maze finished-fn
Use more generic 'finished' instead of 'solved'
Default visited and doors to empty set
Adjust whitespace
Use count of visited to confirm we've visited all

This is a clearer definition than an empty path.
Start search-maze in upper-left location

In every case, we are going to want to start searching from [0 0]. Let's
make it the default instead of passing it in everywhere.
Rename fully-walled-grid to all-walls

This is the only function that mentions a 'grid' and it's confusing.
This function really returns all walls for the maze.
Extract all-walls-without-doors