Add attribute to ViFold to track if it has the same start as its parent.

We’ll be using this for some slightly-more-complicated logic
we need to do in cases where we’re opening/closing folds
with identical starts.
Always mark a fold as open if we're removing the folded attribute.

This means we may do it more than once per fold, but folds
that start in the same place as parents need us to always
mark them open.
Mark folds that have the same start as their parent when creating.
openFold:inRange:levels: always gets the right start fold.

If folds had identical starts to their parents, we would pass
the deepest fold at a given location to
openFold:inRange:levels:. We now properly pass the
topmost fold that meets the requirements (open fold if
closing, closed fold if opening).
Correctly close folds when some share the same start point.
Only mark the start of a closed fold when opening its immediate parent.

We were marking the start of a closed fold with the folded
attachment if we had opened any parent, which means if
we had folds closed three levels deep and we opened the
top level, we’d see a marker both for the second and third
level closed folds. This fixes that issue.
closestCommonParent fold now checks if its arguments are parents of each other.

We were running into an issue where if the first fold was a
parent of the second, and they both shared another parent,
you would get the other shared parent, the first fold’s parent,
as the result.

Now, if the first fold is parent of the second, it is returned,
and if the second is parent of the first, it is returned, and if
not then we search for the nearest common parent as we
did before.