Renamed SortedPathSet -> PathSet for more general use

1. sorted_path_set.c -> path_set.c

2. Split FollowPath out from GraphWalker into a separate header file

3. reduce lock usage in PathHash by exploiting the fact that items are never
   removed from the hash. We can traverse a full bucket without acquiring
   the lock first.