Use vector for depth-first, list for breadth-first

Peek/pop behave as expected when we use the correct data structure.
Depth-first search now uses a vector (stack) and breadth-first search a
list (queue).

I've kept the 'search-algorithm' parameter as a function so that these
transformations can keep their name (depth-first, breadth-first). We
could alternatively initialize the path as a list or vector depending on
the desired behavior.

:tophat: @r00k