codec: Improve Perf: Use slice, not map, to cache (En/De)code specific functions.

Each time the recursive (en/de)codeValue is called, we previously checked a map
to get the specific function to use for the value.

Since each En/Decoder only touches a small subset of types, it is more
performant to use a slice to keep track of them and just linear search
the slice (without locks) to find the specific function to call.

This improved performance by over 10% in benchmarks.