Proposed refactor of the engine: RoundEngine

Review Request #545 — Created June 17, 2014 and submitted — Latest diff uploaded

benjyw, jsirois, patricklaw
Proposed refactor of the engine: RoundEngine

This proposed refactor of the Engine is driven by:

The "idea" goal is special since it requires a compile of a sub-graph of the overall Target graph followed by a gen on the entire graph.
Currently, there is no non-hacky way of specifying a specific section of the Target graph to be passed to a specific task.

This refactor, aims to extract out the scheduling of Tasks and their dependencies from (where its been traditionally stored) and be able to pass through a Target graph if/when required. No matter what order goals are specified in the, their order is overwritten by the schedule() method. 

This change is for building the phase graph recursively via requesting products in prepare(..) and advertising products via a Task classmethod product_type(). I will follow up with another change to be able to request products on a sub-graph (in order to actually fix the idea goal).

Beware, this change is not completely integrated. For now, I wanted to send out this isolated change to get everyone's thoughts on it and make sure we are all on the same page. Especially John, Patrick and Benjy - since you folks have been heavily involved in the recent refactor.