devide Writer

The old design does not support to print progress.
The new one support it.

Raw Level APIs
==============
Writer: write string to the TextWriter.
IFormatter: convert the argument to IWritable.
IWritable: receive the TextWriter and write to it.

High Level APIs
===============
Printer: hold one Writer and one IFormatter.
         provide print methods for one type.
Reporter: hold three Printers.
          provide report methods for each purpose.