Calculate caret display based on closest STEP rather than closest sibling

The caret display position is tied to the ClientRect of the associated
cursor's text content, which is usually found to the left of the cursor.

Using a step iterator ensures only steps within the same root as the cursor
are considered, preventing issues such as #260 & #559.