SelectionView does not need to include partially selected text nodes

Based on logic further in the class (ln 163 - 177), the only partially
selected text nodes are either the startContainer or endContainer of the
range.
Move getVisibleClientRect logic into a common area and share with SelectionView

getVisibleClientRect is a more robust version of the getCollapsedRectOfTextRange
function in SelectionView. The intended behaviour is identical, but
getVisibleClientRect contains many more unit tests and is able to cope
with invisible or collapsed text elements regardless of where they appear
in the document.