Modify indirect() to look for any interface, not just Unmarshaler
Rename unmarshal functions to decode
Allocate values for all pointers encountered in indirect()