lib/template.js
function(master){
	_reduceNeeds.call(this,master);
	//Rules for out of order execution:
	//Goal: We want to get anything that is ambiguous or requires a callback
	//to execute ASAP because they will be our bottlenecks.
	//Ambiguity means that we don't know if the element will affect anything after it,
	// so it's safest to assume that it will affect everything after it.
	//Something that needs a callback is an element that either has a lot of
	//	process time around it and so should tell the template to wait for it.
	//	Or, it is something that needs to make a call to another service, and will,
	//	itself, be idling for a response, that the template needs.
	//We want to execute or callbacks, stop processing, and wait for them to get back to us. 
	//1. Anything that modifies or sets something needs to execute in
	//	order against anything that needs that thing (go it! :).
	//2. Anything that is ambiguous acts as a break point, nothing after it
	//	can render until it's done, ambiguity trumps callbacks. But
	//	ambiguous things can have callbacks.
	//3. Anything that doesn't need anything can render at anytime, but,
	//	ideally, should render as close to the order it is in, when possible.
	//Note: Contrary to intuition, going in order is actually ideal, save for
	// our bottlenecks, because the more we can do in order the more we
	// can buffer to the server in the appropriate order.
	this._executionOrders = [];
	this._inAlready = {};
	var i = this.callBackDocs.length,
		index,l;
	//figure ambiguity out
	while(i--){
		if(this._inAlready[index.toString()]) continue;
		this._executionOrders.unshift([]);
		index = this.callBackDocs[i];
		this._inAlready[index.toString()] = true;
		_orderNeedsByObject.call(this,index);
		this._executionOrders[0].push(index);
	}
	//put everything else in
	this._executionOrders.push([]);
	l = this._executionStack.length;
	i = 0;
	while(i < l){
		if(this._inAlready[i.toString]) continue;
		this._inAlready[i.toString()] = true;
		_orderNeedsByObject.call(this,i);
		this._executionOrders[0].push(i);
		i++;
	}
	this._executionThreadLength = this._executionOrders.length
}
function(master){
	_reduceNeeds.call(this,master);
	//Rules for out of order execution:
	//Goal: We want to get anything that is ambiguous or requires a callback
	//to execute ASAP because they will be our bottlenecks.
	//Ambiguity means that we don't know if the element will affect anything after it,
	// so it's safest to assume that it will affect everything after it.
	//Something that needs a callback is an element that either has a lot of
	//	process time around it and so should tell the template to wait for it.
	//	Or, it is something that needs to make a call to another service, and will,
	//	itself, be idling for a response, that the template needs.
	//We want to execute or callbacks, stop processing, and wait for them to get back to us. 
	//1. Anything that modifies or sets something needs to execute in
	//	order against anything that needs that thing (go it! :).
	//2. Anything that is ambiguous acts as a break point, nothing after it
	//	can render until it's done, ambiguity trumps callbacks. But
	//	ambiguous things can have callbacks.
	//3. Anything that doesn't need anything can render at anytime, but,
	//	ideally, should render as close to the order it is in, when possible.
	//Note: Contrary to intuition, going in order is actually ideal, save for
	// our bottlenecks, because the more we can do in order the more we
	// can buffer to the server in the appropriate order.
	this._executionOrders = [];
	this._inAlready = {};
	var i = this.callBackDocs.length,
		index,l;
	//figure ambiguity out
	while(i--){
		if(this._inAlready[index.toString()]) continue;
		this._executionOrders.unshift([]);
		index = this.callBackDocs[i];
		this._inAlready[index.toString()] = true;
		_orderNeedsByObject.call(this,index);
		this._executionOrders[0].push(index);
	}
	//put everything else in
	this._executionOrders.push([]);
	l = this._executionStack.length;
	i = 0;
	while(i < l){
		if(this._inAlready[i.toString]) continue;
		this._inAlready[i.toString()] = true;
		_orderNeedsByObject.call(this,i);
		this._executionOrders[0].push(i);
		i++;
	}
	this._executionThreadLength = this._executionOrders.length
}
--module--
name:_createExecutionOrder - private method
description: creates the execution order for a template based on its needs.
@param{boolean}