By reading the file in two passes.
The first pass just counts the lines in the file.
The second pass starts by preallocating the correct number of lines, and
then reads the file.
The whole time saving comes from not having to dynamically resize the
lines slice while reading the file.
We just treat them as their plain counterparts.
After testing vs less and cat on iTerm2 3.3.9 / macOS Catalina 10.15.4
that's how they seem to handle this. Counter examples welcome.
Fixes#24
If call "highlight" on an empty file the output will have a line.
We don't really care about that.
This change renames empty.txt (which highlight wants to highlight) into
just "empty", which highlight will not try to highligt, so no line is
added and the test passes.