CharReader keeps a copy of the string internally. Instead, it should have a reference (Rc) to a Vec of Chars. Each time a leaf is added, those chars should be appended to the end of the vec. The, the CharReader will only contain the Rc to the vector and two indexes into the vector pointing to the start and endpoints of the string.