Bugfix: In `_lineBreak()`, don't print the last line if it's empty

This guarantees that if the input doesn't contain any '\n', the output
won't end with a '\n'. Therefore when splitting the output by '\n',
the length of the resulting array is the number of lines in the output.
{Add code to enforce `maxChunks` and `maxChunksPerLine`}

In the current implementation, they are not enforced rigidly, just
taken as advices. The actual number of chunks per line and in total
can surpass these limits.
Print an ellipsis whenever there is a break in lines printed

The same has already been done for columns in a changed line.
{Print ellipses for unprinted line and column changes}

{!
Use ellipses to indicate unprinted lines and columns

If the first line isn't printed, an ellipsis line (a line consisted
of only an ellipsis) is printed at the beginning; if the last line
isn't printed, an ellipsis line is printed at the end; if two line
changes are separated by more than 2 * `contextLines` lines, some
lines between them aren't printed, and an ellipsis line is printed
in their place.

If the first column of a changed line isn't printed, an ellipsis
is printed at the beginning of the first column change; if the
last column of a changed line isn't printed, an ellipsis is printed
at the end of the last column change; if two column changes in a
changed line are separated by more than 2 * `contextColumns` columns,
some columns between them aren't printed, and two ellipses are printed
instead: one at the end of the first column change, and the other
at the beginning of the second column change.

Additionally, if some line or column changes are not printed due to
the limitation by `maxChunks` and `maxChunksPerLine`, extra ellipses
are used to notify the user of this.

For column changes in a changed line, the first `colRes` entry that
isn't printed will have its line and column numbers printed (in cyan),
followed by an ellipsis (rather than its content, in default color).
This tells the user there are column changes not printed, starting
at this one.

For line changes, the first line change (a '-', '+', or '*') that
isn't printed will have its line number printed, followed by an
ellipsis, and the entire line is styled according to its nature
(by default red for '-', green for '+', cyan for '*'). This tells
the user there are line changes not printed, starting at this one.
!}
Add hidden method `configStringDiff()` to change config vars
{Add an `options` argument for the user to set options}

{!Make various config options modifiable by the user!}
Handle object equivalents of primitive types

TODO: print a number object as "Number(3)", for example, to
differentiate it from primitive numbers.
Use '+' instead of empty prefix for added lines
When diffing two single-line strings, don't print the line number prefix
Special treatment when diffing an empty string and a non-empty one
Require wrap width to be at least 20
Special treatment for non-matched single line changes
Refactor: process two single-line change scenarios at the same place
Surround strings with single quotes in reformatted diff results
TODO: Call `util.inspect()` on text content in the diff result
Use our string diff code to diff object member strings, too
Post-process string diff result for user-friendly display
Collect and display `numLineChanges` and `numCharChanges` stats