Split part of the buffer implementation out into naive_buffer.go.
Better more generic Line/RowCol/Word etc implementations making it
easier to swap in another "BufferInterface" implementation.

NaiveBuffer gained a lot of performance here and out-performs the
Ropeish implementation in most operations.

                                Ropeish          Naive
BenchmarkBufferInsertBegin    4926 ns/op   268957    ns/op
BenchmarkBufferInsertEnd     10472 ns/op      112    ns/op
BenchmarkBufferInsertMid      9544 ns/op   128315    ns/op
BenchmarkBufferInsertRand     8695 ns/op   139735    ns/op
BenchmarkLine                 2196 ns/op        5.88 ns/op
BenchmarkRowCol            1218945 ns/op   873623    ns/op
BenchmarkSubstr                312 ns/op      127    ns/op
BenchmarkSubstrR               205 ns/op       24.2  ns/op
BenchmarkTextPoint          858972 ns/op   123955    ns/op
BenchmarkWord               115541 ns/op    86787    ns/op