Xiaobing:

I fixed almost everything except the parallel strategy where I am not
sure how to proceed. I left an empty visit method for you to fill in.
Also, there is an empty visit method for load stage in the run strategy
class that I need you to fill in. 

There is no need for uncached run since we cache everything. We may have
think about how to delete unused cache later. 

Also, mergeop flag is no longer needed since we merge automatically. The
choice of merging is left to the programmer. (whether they want to
construct proj pipe). We don't have a way to construct proj pipe yet but
we should provide it soon since it is a nice feature.

Finally, I again abandoned the idea of using job queue we obtained from
the job visitor. Instead, the run strategy will traverse everything
again but it is through our visitor. Using job queue seems to be too
rigid