checkout(action: ?Action) {
    let sharedRoot = this.sharedRoot(action)

    this.head = action || this.head

    // Each action has a "next" property that tells the history how to
    //  move forward. Update that path back to the sharedRoot:
    let cursor = this.head
    while (cursor && cursor !== sharedRoot) {
      let parent = cursor.parent

      if (parent) {
        parent.lead(cursor)
      }

      cursor = parent
    }

    this.setSize()

    this.reconcile(sharedRoot)

    return this
  }
Set the head of the tree to a target action. This has the effect
of controlling time in a Microcosm's history.