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.
Would you prefer:
```Go
if vv, ok := v.Interface().(fmt.Stringer); ok {
  p.fmtString(vv.String(), true)
  printed = true
} else if vv, ok := v.Interface().(encoding.TextMarshaler); ok {
  if b, err := vv.MarshalText(); err == nil {
    p.fmtString(string(b), true)
    printed = true
  }
}
```
or:
```Go
if v.Interface().Implements(fmt.Stringer) {
  p.fmtString(v.Interface().(fmt.Stringer).String(), true)
  printed = true
} else if v.Interface().Implements(encoding.TextMarshaler) {
  if b, err := v.Interface().(encoding.TextMarshaler).MarshalText(); err == nil {
    p.fmtString(string(b), true)
    printed = true
  }
}
```
I can't assign a value until I assert the interface it implements first.  I don't quite understand, do you have something else in mind?