code: void handleChunk(CellChunk chunk) {
      try {
        currentState = currentState.handleChunk(chunk);
      } catch (RuntimeException e) {
        currentState = null;
        throw e;
      }
    }
docs: Feeds a new chunk into the sate machine. If the chunk is invalid, the state machine will throw
  an exception and should not be used for further input.
  
  <dl>
  <dt>Valid states:
  <dd>{@link StateMachine#AWAITING_NEW_ROW}
  <dd>{@link StateMachine#AWAITING_NEW_CELL}
  <dd>{@link StateMachine#AWAITING_CELL_VALUE}
  <dt>Resulting states:
  <dd>{@link StateMachine#AWAITING_NEW_CELL}
  <dd>{@link StateMachine#AWAITING_CELL_VALUE}
  <dd>{@link StateMachine#AWAITING_ROW_CONSUME}
  </dl>
  
  @param chunk The new chunk to process.
  @throws InvalidInputException When the chunk is not applicable to the current state.
  @throws IllegalStateException When the internal state is inconsistent