IND/RI/NEL control sequence implementations

This is the first in what will be a series of control sequence implementations, starting off with [INDEX](http://vt100.net/docs/vt100-ug/chapter3.html#IND), [REVERSE_INDEX](http://vt100.net/docs/vt100-ug/chapter3.html#RI), and [NEXT_LINE](http://vt100.net/docs/vt100-ug/chapter3.html#NEL). Currently, the steps used for each are:

1. inc/dec the scroll_offset
2. move cursor down/up
3. allocate/deallocate line views

In addition, the VERTICAL_TAB case was modified to allocate new line views and then scroll to the bottom of the terminal view

My main use case for this feature was `man`, so once I could successfully scroll up and down, I knew that progress had been made.

Some potential future control sequences have been added to the `enum` along with markings specifying which sequences have been implemented or not.

Bugs Introduced:
While running the `vttest` display test (option 1) the scroll_offset seems to become negative to around -37 or so, and I'm interested in the function `erase_range_screen` which seems to be accessing terminal space with an "absolute position"

```
private void erase_range_screen(CursorPosition start_position = {1, 1},
	CursorPosition end_position = {terminal.lines, terminal.columns + 1}) {
	var absolute_start_position = get_absolute_position(start_position);
	var absolute_end_position = get_absolute_position(end_position);
	
	// Constrain positions to permissible range
	absolute_start_position.line = int.min(absolute_start_position.line, size - 1);

	absolute_start_position.column = int.min(absolute_start_position.column, //<- Fails here
		get(absolute_start_position.line).get_length()); //<-------- due to negative index

	absolute_end_position.line = int.min(absolute_end_position.line, size - 1);
	absolute_end_position.column = int.min(absolute_end_position.column,
		get(absolute_end_position.line).get_length());
	
	erase_range(absolute_start_position, absolute_end_position);
	}
```
These two lines should not be necessary for the code to work (follow the `move_cursor -> line_added -> on_output_line_added` path). Did you encounter problems without them?