Handles all of the logic level work for the folded scrolling interaction.
A Layout represents the state of a folded scroll
interface. The layout references a ListModel to get it's information.
Each Layout is broken down to a set of LayoutComponents, each being either
a type of Fold, or a List of items. The LayoutCreator makes new layouts
from constraints. The LayoutMatcher helps to match transitioning elements,
and the LayoutTransitioner comes up with the final layout for the transition
between two layouts.