createMatchingDecoder

Returns an IntDecoder which matches this encoder. Every encoder
must return an IntDecoder and null is not a valid
value. If an encoder is just a filter, it should at least return its
wrapped encoder's matching decoder.

NOTE: this method should create a new instance of the matching
decoder and leave the instance sharing to the caller. Returning the same
instance over and over is risky because encoders and decoders are not
thread safe.