At the moment we're allocating a new slice for [type]AcceptableKinds in every decode[Type]To method and we're doing a linear search over those kinds in this method.
I think we can make a single object to hold maps of the acceptable kinds for each type so we can allocate them once and search them quickly.
As pointed out in this review comment: