IsEmpty reports whether v should be treated as "empty" for omitempty semantics.
This is similar to encoding/json's emptiness rules but also treats structs
(including nested structs) as empty when all fields are empty, and treats
time.Time as empty when IsZero() is true.