Use fmt.Stringer or encoding.TextMarshaler if possible

An implementation for kr/pretty/issues/16 but also includes fmt.Stringer with priority given to Stringer before TextMarshaler.

I copied kr/pretty/pull/17 test implementation and added two other test cases.
Assign a value on line 172 and I will be typed in each case so this line would reduce to `p.fmtString(v.String(), true)` and the other case would be simplified similarly.