Split ViRopeNode and node indexing from main file.

ViRope is going to get complex with updating/real tree stuff
now, so move the helper stuff out so the file stays focused.

Also drop nodeIndices, as they weren’t really well-implemented.
Start work towards changeable proper trie rope.

This breaks everything… ViRope is now generic on its
content type, and knows about branching factor, the length of
the leaf content, and the depth of the trie.

It’s also set up to have an edit window and left and right
pieces of the trie. It’s generally beginning to look more like a
trie than a rope per se, except the last 12 bits (by default) of
the index are used to index into the content at a leaf instead
of further into the trie.

The goal here is to have the structure perform as close to
using a single string as possible when dealing with smaller
files.

ViStringRope.swift provides the quick layer of type aliasing
over ViRope to make it deal specifically with Swift Strings.

Tests are failing everywhere and some stuff is commented
out; more to come.
Wrap up simple case of replaceRange:withContents:.

This is the case where the edit happens within the edit
window. Next step is actually dealing with the tries on either
side.