The Surface type represents the contents of a terminal screen.
It is not directly connected to a terminal device.
It consists of a buffer and a log of changes. You can accumulate
updates to the screen by adding instances of the Change enum
that describe the updates.
Position holds 0-based positioning information, where
Absolute(0) is the start of the line or column,
Relative(0) is the current position in the line or
column and EndRelative(0) is the end position in the
line or column.