walking avoids overflow on cyclic types
walking ignores private fields
use generics for type filters and `Appender`
rename `WalkFuncPtr` → `WalkPtrFunc`
add `WalkPtr`, `WalkFuncPtr`; remove `DerefPtr`
`DeepFields` for struct flattening; other misc
add `IfaceFilterFor`, `ShallowIfaceFilterFor`
split `IfaceFilter` and `ShallowIfaceFilter`
`IfaceFilter` visits either self or descendants, not both
filters return flagsets; descendant walking is optional