constructor() {
    BASE_CHAR.deletedIds = new Set()
    this.chars = [BASE_CHAR]
  }
Contains the textual data and corresponding lamport timestamps (ids) for each character. Each character
has a primary id, but may have secondary ids in a Set representing deleted characters at that position. In
addition, each character has a list of other "rich" attributes, such as bold, color, and so forth.

Currently the data storage is in regular JS arrays, but perhaps we could use immutable-js:
 - (possible) faster or more consistent insertion performance, splice performance is implementation dependent
 - blazing fast reference equality comparisons