Line numbering now an optional way to format output.
Line wrapping is now much more precise. The ``wrap`` parameter now
specifies the line length desired, including however many
characters are consumed by prefix, suffix, and indentation.
Vertical spacing is regularized and much better tested. The
``vsep`` option, previously available only on a few methods, is
now available everywhere. ``vsep=N`` gives N blank lines before
and after the given output statement. ``vsep=(M,N)`` gives M blank
lines before, and N blank lines after. A new ``Vertical`` class
describes vertical spacing behind the scenes.
``Say`` no longer attempts to handle file encoding itself, but
passes this responsibility off to file objects, such as those
returned by ``io.open``. This is cleaner, though it does remove
the whimsical possibility of automagical base64 and rot13
encodings. The ``encoding`` option is withdrawn as a result.
You can now set the files you'd like to output to in the same way
you'd set any other option (e.g. ``say.set(files=[...])`` or
``say.clone(files=[...])``). "Magic" parameter handling is enabled
so that if any of the items listed are strings, then a file of
that name is opened for writing. Beware, however, that if you
manage the files option explicitly (e.g.
``say.options.files.append(...)``), you had better provide proper
open files. No magical interpretation is done then. The
previously-necessary ``say.setfiles()`` API remains, but is now
deprecated.
``fmt()`` is now handled by ``Fmt``, a proper subclass of ``Say``,
rather than just through instance settings.
``say()`` no longer returns the value it outputs. ``retvalue`` and
``encoded`` options have therefore been withdrawn.