Add initial ViRopeUtf16 and integer indexing.

Bit of a code dump here. Things that happened:
 - Abstracted rope indices into RopeIndexType, which can
   index a rope containing an arbitrary content type. This lets
   use it both for indexing a Swift string-y index strategy and
   the UTF-16 one we’ll need to create NSString compatibility.
 - Also pulled out ViRopeNode and related classes and made
   them generic over the same ContentType as the index.
 - Introduced startIndexFor/endIndexFor generic tool for
   getting start/end indices for ViRopeNode collections.
 - Add childLengths/childContentLengths to ViRopeNode.
   They are meant to be lazily computed but right now it’s
   likely that’s not happening due to some type system
   disagreements. Need to revisit that. They give us a way to
   index quickly (O log n) into the rope, which will be important
   for random access when working as an NSString in the UI.
 - Added helpers for the aforementioned indexing, including a
   main function, contentForIntegerIndexInTree, that provides
   the ability to integer-index into a rope with any ContentType.
 - Add an extension that provides a .utf16 view on a rope
   similar to the .utf16 view on a Swift String. It uses its own
   rope tree, but this tree contains references to utf16 views
   on the original Swift Strings, rather than actual Strings, so
   it should be (fairly?) cheap.
 - Added a couple of tests for the indexing functionality.
Add characterAtIndex: in ViRopeUtf16.

Should make us ready to subclass NSString? O.O