Makes sure DISTINCT is lazy

Refactors PlanBuilders to no longer have their priority as part
of the class. Instead, their order in the ExecutionPlanBuilder decides
in which order they will be selected. This makes it much easier to
see the priority between PlanBuilders.

To actually fix the problem with DISTINCT not being lazy,
DistinctBuilder was moved from the Finish phase to the Extract phase.