Package config: Improve printing of the Value type.
Package config: Improve printing of the Value type.

The Value.String() method returns a string only, implemeting the fmt.Stringer
interface.

Previously, a string value `StringValue("test")` would print as:

  `0 "test" 0 false`

With this change, it prints as:

  `test`

Users of the package can use the new Value.IsString() method to check if a
value really is a string. This is clumsy, but in reality users will more likely
use Value.Interface() and a type switch.

This change also implements the fmt.GoStringer interface for the Value type.
With this, if the above string value is printed with `%#v`, it will produce:

  `config.StringValue("test")`

Consider these test outputs to see how these changes improve the output:

  config_test.go:397: block = config.Block{Key:"Plugin", Values:[]config.Value{config.StringValue("test")}, Children:[]config.Block(nil)}
  config_test.go:400: block.Merge() = blocks differ: got {key:SomethingElse values:[test]}, want {key:Plugin, values:[test]}, want error false
  config_test.go:407: other block = config.Block{Key:"SomethingElse", Values:[]config.Value{config.StringValue("test")}, Children:[]config.Block(nil)}

collectd/go-collectd,octo/go-collectd