The ordering is controlled by the order the resources are added to the catalog. This is needed because not all resources have a file and line, and not all files and lines are unique. This prioritizer works off of the guarantee, which we put in, that the array of resources in the catalog is preserved in the order of insertion and that the `generate_priority_for` method will be called in that order for each resource. Each prioritizer is required to produce values that will sort into the order that the resources should be run.

All of the prioritizers feed into the order in which we traverse the [priority queue](http://en.wikipedia.org/wiki/Priority_queue) (that is the RbTreeMap) that is used for the ready queue when traversing the graph. The priority of the resources in the queue is determined by the prioritizer. The SequentialPrioritizer preserves the order that the resources were inserted into the catalog, whereas the TitleHashPrioritizer uses the method of hashing the type and title.

In addition to just the elements that are part of the catalog that is sent, the prioritizers also need to take into account any generated resources (such as by a recursive file resource). The SequentialPrioritizer needs to handle this case specially (none of the others do) since it needs to make sure that any generated resources happen before the next resource in the catalog, even though it was inserted later. This is to preserve the ordering of the larger, "logical" resource.