encoder: Support full range of pointer data types

After dereferencing a pointer, we pass the value to appendIface (which knows about time.Time etc)
instead of appendValue (which doesn't).