Make compositing generic over layout_task

This will allow breaking the layout -> compositing dependency
Break the layout -> compositing dependency

This adds a new layout_traits component for the shared trait.
This should allow for faster builds.
Refactor some duplication in Pipeline

There's no need for 2 pipeline-creating methods