Don't call MarshalText() if MarshalYAML() has been called

I found a really nasty bug where, if you have an object that implements both yaml.Unmarshaler and encoding.TextMarshaler, both are called back-to-back, creating incorrect output. This patch fixes it, with tests, and without breaking any existing tests.