Refactor Walk, removing Walk.Builder.

New Walks are now created from existing Walks by appending:
    public Walk<V, E> append( final V to, final E over )
    public Walk<V, E> append( final V to )  // to, over=null
    public Walk<V, E> append( final Walk<V, E> walk )

Walk.getVia() now returns a ImmutableStack<Step>, in the reverse order of
the Walk's steps. Walk.getViaFromStart() (to be renamed) returns the
forward order.
Remove unused ImmutableStack.contains() method.
Remove unused FifoQueue.contains() method.
Remove unused FifoQueue.size() method.
Add no-arg and one-arg factory methods for creating a FifoQueue.

This avoids the java compiler warning about creating a generic array for a
varargs parameter in those use cases.
Add no-arg and one-arg factory methods for creating an ImmutableStack.

This avoids the java compiler warning about creating a generic array for a
varargs parameter in those use cases.
Rename ImmutableStack to PersistentList.

This is the proper name for the data structure, even though it doesn't
support common operations like insertion into the middle. The following
methods were also renamed:

peek() => first()
pop() => rest()
push(E) => add(E)
Throw NoSuchElementException instead of EmptyStackException when empty.
Make PersistentList.reverse() return a PersistentList.
Remove unnecessary PersistentList.size() method.
Implement a single-element PersistentList as a special case.

One reason is that it is a common case for single-step (adjacency) walks.
The other primary reason is that list.reverse() can be the original list.
Fix a comment to reflect method renaming.
Add PersistentList.addAll( Iterable<E> ).
Remove Walk.getViaFromStart(), since it's just short for getVia().reverse().
No need to store Walk.to any more now that it's easily accessible.